JInternalFrame
JDesktopPane のすべてのフレームの一番上にa をプッシュするにはどうすればよいですか?
6 に答える
grabFocus() と requestFocus() を試してください。そのうちの1つが機能するはずです。私は個人的に requestFocus() のみを使用しました。
OPは、それが機能していないことに気づき、手動でsetSelected
呼び出す必要がありました。activateFrame
これは、私が抱えていた の問題に似ていGTKLookAndFeel
ます。setSelected
最終的にトリガーするために使用するようにすべて配線されたアプリケーションがありましたactivateFrame
。Windows および Mac ネイティブのルック アンド フィールで問題なく動作しました。activateFrame
自動的に呼び出されます。
Ubuntu では、LaF が選択されたシステムがGTKLookAndFeel
何らかの理由でこれを呼び出していませんでしactivateFrame
た。setSelected
エラーなどをスローしているようには見えませんでした。他の LaF が行っているように、呼び出しに取り組まなかっただけですactivateFrame
。GTKLookAndFeel
互換性の問題だと思います。
結局、私はこれをパントし、禁止してGTKLookAndFeel
、 に置き換えましたMetal
。 Motif
互換性のある動作もありました(しかし、それはとても醜いです...)。コードは次のようになります。
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
if (UIManager.getLookAndFeel() instanceof com.sun.java.swing.plaf.gtk.GTKLookAndFeel)
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
JInternalFrame API を読み、「内部フレームの使用方法」に関する Swing チュートリアルへのリンクをたどってください。アクティブな内部フレームを「選択」する方法の実例が見つかります。
この例では、 ajavax.swing.Action
を使用してメニューからフレームを選択しています。
/* JInternalFrame メソッド setSelected(false) を呼び出して、現在の JInternalFrame を選択解除します。
*/次に、同じ方法を使用して新しい JInternalFrame を選択します。つまり、setSelected(true)
サンプルコード:
試してみてください{ jframe1.setSelected(false); jframe2.setSelected(真); }catch (PropertyVetoException ex) {}
モーダル JInternalFrame を閉じる Zen(me) 氏の投稿を参照