显示 JPanel 的未修饰的全屏 JFrame 在 Alt-tab 之前不会重新绘制
Undecorated full-screen JFrame showing JPanel doesn't repaint until Alt-tab
我有一个 JPanel v。下面的函数创建了一个名为 window 的全屏 Jframe,它将以这个 JPanel 为特色。我有:
protected final void fullScreenMulti(final JPanel v) {
final JFrame window= new JFrame();
window.setUndecorated(true);
window.add(v);
//window.setVisible(true);
.
.
.
window.validate();
window.repaint();
GraphicsDevice gdev = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
gdev.setFullScreenWindow(window);
DisplayMode mode = gdev.getDisplayMode();
window.setSize(mode.getWidth(), mode.getHeight());
}
这适用于为代码编写的默认渲染。但是,选择使用 JOGL 的 GL 渲染器会使全屏框架变为空白,我得到一个白屏。您将必须切换标签进出,或按开始来绘制面板。我尝试使用以下方法更改 window 的背景:
Container c = window.getContentPane();
c.setBackground(Color.yellow);
虽然没有任何作用,但我仍然看到白屏。 (虽然我调试的时候可以看到背景属性应用成功了。)
同时单击第二个屏幕的空白区域(window 托管在第一个屏幕上),甚至单击“开始”按钮,有时会使框架变黑并且我的鼠标适配器无法工作然后。 (这里到底发生了什么,我该如何调查?)其他时候,它与 Alt-tab 具有相同的效果。
在 Java 中没有做太多 Swing 的东西,我有点迷路了。看到它似乎在一个渲染器上工作正常而不在另一个渲染器上工作,这表明它与 GL 渲染器有关,但在我的非全屏模式下渲染 JPanels 时渲染器工作正常;另外我的理解是渲染器的作用仅仅是缓冲我的 JPanel 上的视频。(我的意思是渲染器所做的,对吧?)所以这可能是上面没有指定某些设置的情况,但是原始渲染器会处理它。有什么建议吗?
edit:不用说,删除 window.add(v) 将使框架渲染良好,改变框架背景等的结果以前不起作用,现在将在框架上可见。
这是已知的problem。 -Dsun.java2d.noddraw=true 解决了。
我有一个 JPanel v。下面的函数创建了一个名为 window 的全屏 Jframe,它将以这个 JPanel 为特色。我有:
protected final void fullScreenMulti(final JPanel v) {
final JFrame window= new JFrame();
window.setUndecorated(true);
window.add(v);
//window.setVisible(true);
.
.
.
window.validate();
window.repaint();
GraphicsDevice gdev = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
gdev.setFullScreenWindow(window);
DisplayMode mode = gdev.getDisplayMode();
window.setSize(mode.getWidth(), mode.getHeight());
}
这适用于为代码编写的默认渲染。但是,选择使用 JOGL 的 GL 渲染器会使全屏框架变为空白,我得到一个白屏。您将必须切换标签进出,或按开始来绘制面板。我尝试使用以下方法更改 window 的背景:
Container c = window.getContentPane();
c.setBackground(Color.yellow);
虽然没有任何作用,但我仍然看到白屏。 (虽然我调试的时候可以看到背景属性应用成功了。)
同时单击第二个屏幕的空白区域(window 托管在第一个屏幕上),甚至单击“开始”按钮,有时会使框架变黑并且我的鼠标适配器无法工作然后。 (这里到底发生了什么,我该如何调查?)其他时候,它与 Alt-tab 具有相同的效果。
在 Java 中没有做太多 Swing 的东西,我有点迷路了。看到它似乎在一个渲染器上工作正常而不在另一个渲染器上工作,这表明它与 GL 渲染器有关,但在我的非全屏模式下渲染 JPanels 时渲染器工作正常;另外我的理解是渲染器的作用仅仅是缓冲我的 JPanel 上的视频。(我的意思是渲染器所做的,对吧?)所以这可能是上面没有指定某些设置的情况,但是原始渲染器会处理它。有什么建议吗?
edit:不用说,删除 window.add(v) 将使框架渲染良好,改变框架背景等的结果以前不起作用,现在将在框架上可见。
这是已知的problem。 -Dsun.java2d.noddraw=true 解决了。