【问题标题】:GLCanvas inside JPanel doesn't workJPanel 中的 GLCanvas 不起作用
【发布时间】:2015-03-17 11:23:19
【问题描述】:

我正在尝试将带有 OpenGL 内容的 GLCanvas 添加到 JPanel。 JPanel 在 JTabbedPane 内。但是当 GLCanvas 在 JPanel 内时,面板只是灰色的。当我将 GLCanvas 直接添加到 TabbedPane 时,一切正常。

这里是工作代码:

    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 中工作?

【问题讨论】:

  • 这并不奇怪。 GLCanvas 直接基于 java.awt.Canvas。在轻量级容器中混合使用重型容器总是会导致奇怪的问题,主要与组件的 z 顺序有关(AWT 组件没有 z 顺序的概念)。虽然我知道这是“假设”在 Java 6 中修复的,但我目睹了围绕它考虑使用它的许多“奇怪”问题。最好的选择,不要混合使用重型和轻型组件

标签: java swing jpanel jogl glcanvas


【解决方案1】:

LayoutManager 似乎有问题,JPanel 使用 FlowLayout 作为默认值,将其更改为 BorderLayout,如下所示:

 JPanel panel = new JPanel(new BorderLayout());

【讨论】:

  • 其实这是一个 Swing 问题,JOGL 没有“内疚”。干得好 alex2410。
猜你喜欢
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多