2015-03-17 5 views
0

Я пытаюсь добавить GLCanvas с OpenGL-контентом в JPanel. JPanel находится внутри JTabbedPane. Но когда GLCanvas находится внутри JPanel, панель просто серая. Когда я добавляю GLCanvas непосредственно в TabbedPane, все работает отлично.GLCanvas внутри JPanel не работает

xxx

Вот рабочий код:

JTabbedPane mainPane = frame.getMainPane(); 
    GLCanvas canvas = cogl.getCanvas(); 
    mainPane.add("OGL",canvas); 

An здесь является не-рабочий код:

JTabbedPane mainPane = frame.getMainPane(); 
    GLCanvas canvas = cogl.getCanvas(); 

    JPanel panel = new JPanel(); 
    panel.add(canvas); 

    mainPane.add("OGL",panel); 

Так как я могу получить GLCanvas работает внутри JPanel?

+2

Это на самом деле не удивительно. 'GLCanvas' основан непосредственно на' java.awt.Canvas'. Смешивание контейнеров с тяжелыми весами в легких контейнерах всегда приводит к странным проблемам, главным образом относящимся к z-упорядочению компонентов (компоненты AWT не имеют понятия z-упорядочения). Хотя я знаю, что это «предположительно» было исправлено на Java 6, я стал свидетелем многих «странных» проблем вокруг него, чтобы рассмотреть возможность его использования. Лучше всего, не смешивайте тяжелые и легкие компоненты – MadProgrammer

ответ

4

Кажется проблема с LayoutManager, JPanel использование FlowLayout как изменение по умолчанию использовать BorderLayout как следующий:

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

Хорошо, что решило проблему. Большое спасибо за быструю помощь! – ohoeppner

+0

@ohoeppner приветствуется – alex2410

+0

На самом деле, это была проблема Swing, JOGL не был «виновным». Хорошая работа alex2410. – gouessej

Смежные вопросы