我有一个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>
非常感谢您的回答,我希望自己明白!