【发布时间】:2015-02-26 11:05:48
【问题描述】:
我有一个 JPanel v。下面的函数创建了一个全屏 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);
这并没有做任何事情,我仍然得到一个白屏。 (虽然我调试的时候可以看到背景属性应用成功了。)
同时单击第二个屏幕的空白区域(窗口位于第一个屏幕上),或者甚至单击“开始”按钮,有时会使框架变黑,之后我的鼠标适配器无法工作。 (这里到底发生了什么,我该如何调查?)其他时候,它与 Alt-tab 的效果相同。
没有在 Java 中做过很多 Swing 的东西,我有点迷茫。看到它似乎在一个渲染器上工作正常,而在另一个渲染器上却没有,这表明它与 GL 渲染器有关,但是在我的非全屏模式下渲染 JPanel 时,渲染器工作正常;另外,我的理解是,渲染器的作用仅仅是缓冲我的 JPanel 上的视频。(我的意思是渲染器就是这样做的,对吗?)所以这可能是上面没有指定某些设置的情况,但是原始渲染器负责处理它。有什么建议吗?
编辑:不用说,取出 window.add(v) 将使框架渲染得很好,并且改变框架背景等的结果以前不起作用,现在将在框架上可见。
【问题讨论】:
-
谢谢,但这是一个庞大的项目。我添加了我认为相关的部分。我等待初步诊断以提供其他位。这不是你应该做的吗?
-
“我已经添加了我认为相关的位” 通过从
main(String[)调用它以在屏幕上显示问题来证明它是相关的。否则我(也许还有其他人)会怀疑您对相关代码已显示的分析。 -
全屏后,您是否尝试在
JPanel上调用revalidate和repaint... -
@AndrewThompson 该项目非常模块化,所有其他位都经过单独测试。此外,它适用于所述的一种特定设置。同样的面板在非屏幕模式下也能正常显示。我对我的分析仍然充满信心,但愿意接受有关我可能在这里遗漏的建议。
标签: java swing jframe jpanel jogl