Java 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

我正在尝试将带有OpenGL内容的GLCanvas添加到JPanel。JPanel位于JTabbedPane中。但是当GLCanvas在JPanel中时,面板只是灰色的。当我将GLCanvas直接添加到选项卡窗格中时,一切正常

以下是工作代码:

    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。事实上,这是一个挥杆问题,乔格尔没有“有罪”。干得好。