如何将 a 推JInternalFrame
到 JDesktopPane 中所有框架的顶部?
6 回答
尝试grabFocus() 和requestFocus()。其中一个应该工作。我个人只使用 requestFocus()。
阅读 JInternalFrame API 并点击关于“如何使用内部框架”的 Swing 教程的链接,您将在其中找到如何“选择”活动内部框架的工作示例。
在此示例中,ajavax.swing.Action
用于从菜单中选择帧。
OP 注意到这setSelected
不起作用,他需要activateFrame
手动调用。这听起来类似于我遇到的问题GTKLookAndFeel
。我有一个应用程序,它全部连接起来setSelected
以最终触发activateFrame
. 与 Windows 和 Mac 原生外观和感觉配合良好;activateFrame
会被自动调用。
在 Ubuntu 上,系统选择 LaF 是GTKLookAndFeel
,无论出于何种原因,它都没有调用activateFrame
. 它似乎没有setSelected
抛出错误或任何东西,它只是没有activateFrame
像其他 LaF 似乎那样做。我认为这是一个GTKLookAndFeel
兼容性问题。
最后,我对此进行了抨击,只是禁止了GTKLookAndFeel
,将其替换为Metal
. Motif
也有兼容的行为(但它太丑了......)。代码看起来像这样:
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
if (UIManager.getLookAndFeel() instanceof com.sun.java.swing.plaf.gtk.GTKLookAndFeel)
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
/* 通过调用 JInternalFrame 方法 setSelected(false) 取消选择当前 JInternalFrame
*/然后用同样的方法选择新的JInternalFrame;即 setSelected(true)
示例代码:
尝试{ jframe1.setSelected(false); jframe2.setSelected(true); }catch (PropertyVetoException ex) {}
关闭模态 JInternalFrame 请参阅 Zen(我)先生的帖子