Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未装饰的全屏JFrame显示JPanel不';直到Alt tab才重新绘制_Java_Swing_Jframe_Jpanel_Jogl - Fatal编程技术网

Java 未装饰的全屏JFrame显示JPanel不';直到Alt tab才重新绘制

Java 未装饰的全屏JFrame显示JPanel不';直到Alt tab才重新绘制,java,swing,jframe,jpanel,jogl,Java,Swing,Jframe,Jpanel,Jogl,我有一个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); . .

我有一个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渲染器会使全屏帧变为空白,我会得到一个白色屏幕。您必须将tab键移入和移出,或者按Start键才能绘制面板。我尝试使用以下方法更改窗口的背景:

但那没什么用,我还是有一个白色的屏幕。(尽管在调试时,我可以看到后台属性已成功应用。)

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

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


编辑:不用说,取出窗口。添加(v)将使帧渲染精细,更改帧背景等之前不起作用的结果现在将在帧上可见

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

为了更快地获得更好的帮助,请发布一个(最小完整的可验证示例)或(简短、独立、正确的示例)。谢谢,但这是一个庞大的项目。我已经添加了我认为相关的部分。我在等待初步诊断,以提供其他信息。这不是你应该做的吗?“我已经添加了我发现相关的位”通过从
main(String[)
调用它来证明它相关,以在屏幕上显示问题。否则我(可能还有其他人)您是否尝试过在
JPanel
上调用
revalidate
repaint
,在它全屏显示后…@andrewhompson项目是非常模块化的,所有其他位都经过单独测试。此外,它在一个特定的设置下运行良好。T同一个面板在非屏幕模式下也显示得很好。我对我的分析仍然充满信心,但我愿意接受关于我可能在这里遗漏什么的建议。
Container c = window.getContentPane();
c.setBackground(Color.yellow);