Java Swing组件没有重新绘制

时间:2015-10-19 13:14:25

标签: java swing opengl

我有一个LWJGL OpenGL显示器显示在AWT Canvas中,而后者又在Swing JPanel中,用作Swing JFrame的内容窗格。在程序的某个时刻,我想切换包含JComponent显示的AWT Canvas,这样就不会有类似的东西:

JFrame > JPanel > Canvas > Display

我有类似的东西:

JFrame > JPanel > JComponent

但是,即使我从JPanel中删除Canvas并添加JComponent,然后重新验证JPanel并重新绘制它,Display仍会显示,直到我CTRL-ALT-SUPPR到任务管理器(我的JFrame设置为Undecorated,ExtendedState为JFrame.EXTENDED_BOTH,所以它是全屏)。在这一点上,JComponent显示没有发生任何事情..

我将分享我的代码部分进行转换,这样你就可以帮我指出我做错了什么:

public static void switchTo(Container container){
    pan.removeAll();
    container.setBounds(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height);
    pan.add(container);
    frame.getContentPane().validate();
    pan.revalidate();
    pan.repaint();
}

其中pan是我的JPanel,而frame是我的JFrame。

我也试过直接将我的JComponent设置为我的JFrame的内容窗格,但这会得到完全相同的结果。

我设法使其正常运行的唯一方法是事先在显示器上调用destroy();但是,我需要保持OpenGL上下文运行,以便我不必重新初始化Display并在切换回Display时重新加载每个纹理,考虑到我拥有的纹理数量,这将是一个相当长的过程。 / p>

非常感谢您的回答,我希望自己明白!

0 个答案:

没有答案