全屏Swing框架在Linux中无法正确聚焦(Windows很好)

n0p*_*0pe 5 java linux swing frame

我有一个应用程序产生几个全屏 - 无装饰框架(基本上控制所有屏幕空间).我的问题是,某些帧上的某些按钮被设计为"切换屏幕",这基本上意味着显示另一帧而不是当前帧.

我在Windows中使用以下方法轻松实现了这一目标:

target.setVisible(true);
target.requestFocus();
this.parent.setVisible(false);
Run Code Online (Sandbox Code Playgroud)

target我要切换到的框架在哪里.这是有效的,因为最初,我将所有帧设置为除了第一个"主"帧之外不可见.

现在,当我将其移植到Linux环境中时,在更改帧时会出现一个丑陋的"闪烁".在这一瞬间,我可以看到我的桌面背景和我在应用程序后面存在的任何打开的窗口.我之前在Windows中遇到过这个问题并通过聚焦目标帧来修复它,然后使旧的不可见.

关于如何解决这个Linux特定问题的任何想法?

编辑:

setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
setUndecorated(true);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(0,0,screenSize.width, screenSize.height);
this.getContentPane().setLayout(null);
setVisible(true);
validate();
Run Code Online (Sandbox Code Playgroud)

tra*_*god 5

CardLayout可能会成为一个很好的单帧替代方案.您可以使用组合框按钮或两者进行导航.

更新:此示例在Ubuntu 10.04.3 LTS上使用Java版本1.6.0_20时不会导致闪存.


And*_*son 5

target.requestFocus();
Run Code Online (Sandbox Code Playgroud)

来自JavaDocs:

请注意,不鼓励使用此方法,因为其行为取决于平台.相反,我们建议使用requestFocusInWindow().如果您想了解有关焦点的更多信息,请参阅" Java教程"中的" 如何使用焦点子系统 "一节.