2010-12-02 5 views

答えて

2

JInternalFrame APIを読み、アクティブな内部フレームを「選択」する方法の実例がある「内部フレームの使い方」のSwingチュートリアルへのリンクに従ってください。

+0

DestopManager.activateFrame(frame)が解決策であることが判明しました。私はそこの例の一つからそれを導き出しました。助けてくれてありがとう。 – davidahines

+1

@dah、私はframe.setSelected(true)がもっと簡単だと思ったでしょう。これは、新しいフレームが作成されるたびにこの例が使用するものです。私はチュートリアルで参照されているactivateFrame()メソッドを見たことがありません。 – camickr

+0

私はなぜそれがわからないのですが、それは私にとってはうまくいきませんでした。 – davidahines

3

grabFocus()とrequestFocus()を試してください。 1つはうまくいくはずです。私は個人的にrequestFocus()のみを使用しました。

+1

私のためには機能しません。また、(それがうまくいけば)、APIによると、あなたはrequestFocusInWindow()を使用する必要があります。 – camickr

+0

動作しませんでした。 desktop.getDesktopManager()を使用して終了しました。activateFrame(jif); JIFがJInternalFrameの場合 – davidahines

+0

この場合、grabFocus()、requestFocus()、またはtransferFocus()のどちらも動作しません。 setSelected(true)、私のために働いた。 – lepe

2

このexampleでは、メニューからフレームを選択するのにjavax.swing.Actionが使用されます。 * /その後、

1

/*(偽)するsetSelected JInternalFrameのメソッドを呼び出すことにより、選択解除現在のJInternalFrameを作る

同じ方法を使用して新しいJInternalFrameのを選択します。すなわち(真)するsetSelected

サンプルコード:

試し{ jframe1.setSelected(偽); jframe2.setSelected(true); }キャッチ(はPropertyVetoExceptionの例){}

2

OPはsetSelectedが働いていなかったと指摘している、と彼は手動activateFrameを呼び出すために必要な。これは私がGTKLookAndFeelとしていた問題と似ています。私はすべて最終的にactivateFrameをトリガーするためにsetSelectedを使用するように配線されたアプリケーションを持っていました。 WindowsとMacのネイティブなルック&フィールでうまく動作しました。 activateFrameが自動的に呼び出されます。

Ubuntuでは、LaFを選択したシステムはGTKLookAndFeelであり、何らかの理由でactivateFrameが呼び出されていませんでした。 setSelectedがエラーや何かを投げているようには見えなかったが、他のLaFsがそうしているようにactivateFrameと呼ぶことにはならなかった。私はそれがGTKLookAndFeelの互換性の問題だと思う。

最後に私はこれに賭けてGTKLookAndFeelを禁止し、それをMetalに置き換えました。 Motifも互換性のある動作をしていました(しかし、それはとても醜いです...)。コードは次のようになります。

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
if (UIManager.getLookAndFeel() instanceof com.sun.java.swing.plaf.gtk.GTKLookAndFeel) 
    UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); 
+0

+1おそらくそれはそれを説明しています。私はUbuntuで "Nimbus"を使用しています。 – lepe