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 ,将其替换为MetalMotif也有兼容的行为(但它太丑了……)。 代码看起来像这样:

 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(我)