显示 JPanel 的未修饰全屏 JFrame 直到 Alt-tab 才重新绘制



我有一个JPanel v。下面的函数创建了一个全屏Jframe,称为window,它将使用这个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渲染器会使全屏框架变为空白,我会得到一个白色屏幕。您必须切换选项卡的输入和输出,或者按"开始"以绘制面板。我尝试使用更改窗口的背景

Container c = window.getContentPane();
c.setBackground(Color.yellow);

但这没有任何作用,我仍然会看到一个白色屏幕。(尽管当我调试时,我可以看到后台属性已成功应用。)

同时单击第二个屏幕的空白区域(窗口位于第一个屏幕上),甚至单击"开始"按钮,有时会使框架变黑,然后我的鼠标适配器无法工作。(这里到底会发生什么,我该如何调查?)其他时候,它也有与Alt选项卡相同的效果。

我没有用Java做过太多Swing的东西,a我有点迷路了。看到它在一个渲染器上似乎工作得很好,而在另一个上却没有,这表明它与GL渲染器有关,但在我的非全屏模式下渲染JPanels时,渲染器工作得很正常;此外,我的理解是,渲染器的作用只是缓冲我的JPanel上的视频。(我的意思是,渲染器就是这样做的,对吧?)所以这可能是上面没有指定某些设置的情况,但原始渲染器会处理它。有什么建议吗?

edit:不用说,去掉window.add(v)将使帧渲染精细,并且改变帧背景等以前不起作用的结果现在将在帧上可见。

这是一个已知的问题-Dsun.java2d.noddraw=true解决了这个问题。

最新更新