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