繁体   English   中英

显示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渲染器会使全屏帧变为空白,我会看到一个白色屏幕。 您必须切换标签,然后按“开始”才能绘制面板。 我尝试使用以下方法更改窗口的背景:

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

虽然没有做任何事情,但我仍然得到一个白色的屏幕。 (虽然我调试时,我可以看到background属性已成功应用。)

同时单击第二个屏幕的空白区域(窗口位于第一个屏幕上),或者甚至单击“开始”按钮,SOMETIMES使框架变为黑色,然后我的鼠标适配器无法工作。 (这里究竟会发生什么,我该如何调查?)其他时候,它与Alt-tab具有相同的效果。

在Java中没有做太多Swing的东西而且我有点迷失。 看到它似乎在一个渲染器上工作正常而不是另一个渲染器,表明它与GL渲染器有关,但渲染器在我的非全屏模式下渲染JPanel时工作正常; 另外我的理解是,渲染器的作用仅仅是缓冲我的JPanel上的视频。(我的意思是渲染器的功能,对吧?)所以可能是某些设置没有在上面指定的情况,但是原始渲染器负责处理它。 有什么建议吗?

编辑:不用说,取出window.add(v)将使帧渲染正常,并且改变以前不工作的帧背景等的结果现在将在帧上可见。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM