Java JPanel内部的GLCanvas不';行不通
我正在尝试将带有OpenGL内容的GLCanvas添加到JPanel。JPanel位于JTabbedPane中。但是当GLCanvas在JPanel中时,面板只是灰色的。当我将GLCanvas直接添加到选项卡窗格中时,一切正常 以下是工作代码:Java JPanel内部的GLCanvas不';行不通,java,swing,jpanel,jogl,glcanvas,Java,Swing,Jpanel,Jogl,Glcanvas,我正在尝试将带有OpenGL内容的GLCanvas添加到JPanel。JPanel位于JTabbedPane中。但是当GLCanvas在JPanel中时,面板只是灰色的。当我将GLCanvas直接添加到选项卡窗格中时,一切正常 以下是工作代码: JTabbedPane mainPane = frame.getMainPane(); GLCanvas canvas = cogl.getCanvas(); mainPane.add("OGL",canvas); J
JTabbedPane mainPane = frame.getMainPane();
GLCanvas canvas = cogl.getCanvas();
mainPane.add("OGL",canvas);
JTabbedPane mainPane = frame.getMainPane();
GLCanvas canvas = cogl.getCanvas();
JPanel panel = new JPanel();
panel.add(canvas);
mainPane.add("OGL",panel);
以下是不工作代码:
JTabbedPane mainPane = frame.getMainPane();
GLCanvas canvas = cogl.getCanvas();
mainPane.add("OGL",canvas);
JTabbedPane mainPane = frame.getMainPane();
GLCanvas canvas = cogl.getCanvas();
JPanel panel = new JPanel();
panel.add(canvas);
mainPane.add("OGL",panel);
那么,如何使GLCanvas在JPanel内部工作?似乎与
LayoutManager
有关,JPanel
使用FlowLayout
作为默认设置,将其更改为BorderLayout
,如下所示:
JPanel panel = new JPanel(new BorderLayout());
LayoutManager
,JPanel
默认使用FlowLayout
将其更改为BorderLayout
,如下所示:
JPanel panel = new JPanel(new BorderLayout());
这其实并不奇怪
GLCanvas
直接基于java.awt.Canvas
。在轻型容器中混合重型容器总是会导致奇怪的问题,主要与组件的z顺序有关(AWT组件没有z顺序的概念)。虽然我知道在java 6中是“假设”的,但我已经目睹了许多奇怪的问题,考虑使用它。最好的办法是,不要混合使用重型和轻型组件。这其实并不令人惊讶GLCanvas
直接基于java.awt.Canvas
。在轻型容器中混合重型容器总是会导致奇怪的问题,主要与组件的z顺序有关(AWT组件没有z顺序的概念)。虽然我知道在java 6中是“假设”的,但我已经目睹了许多奇怪的问题,考虑使用它。最好的办法是,不要把重的和轻的成分混在一起。事实上,这是一个挥杆问题,JOGL并没有“有罪”。干得好,亚历克斯2410。事实上,这是一个挥杆问题,乔格尔没有“有罪”。干得好。