| Summary: | JAWTWindow's HierarchyListener doesn't set component visible (again) on 'addNotify(..)' - GLCanvas in JtabbedPane disappear | ||
|---|---|---|---|
| Product: | [JogAmp] Jogl | Reporter: | Franco <fzanelli> |
| Component: | awt | Assignee: | Sven Gothel <sgothel> |
| Status: | RESOLVED FIXED | ||
| Severity: | critical | ||
| Priority: | --- | ||
| Version: | 2 | ||
| Hardware: | pc_all | ||
| OS: | all | ||
| Type: | --- | SCM Refs: |
887dbdb34d71a3a266b7854bc9a3842aad1032f9
|
| Workaround: | --- | ||
| Bug Depends on: | |||
| Bug Blocks: | 849 | ||
JAWTWindow's HierarchyListener doesn't set component visible (again) on 'addNotify(..)' It only renders the component invisible after removeNotify() which is performed implicit anyways .. Case java.awt.event.HierarchyEvent.DISPLAYABILITY_CHANGED shall perform similar as our java.awt.event.HierarchyEvent.SHOWING_CHANGED impl. |
I have experienced a problem that didn't appear in version 2.0.2 but appears since version 2.1.0. I have a Jframe with a JtabbedPane composed by 2 Tabs and a GLCanvas always contained in the panel of the selected tab. When I switch form tab1 to tab2, glcanvas is added to tab2, when I switch back to tab1 glcanvas is added to tab1. The problem is when I switch back to tab1, glcanvas disappear. I post the code of my simple application: public class JoglTabbedPaneError extends JFrame { private GLCanvas glCanvas; private JPanel panel1; private JPanel panel2; private final JTabbedPane tabbedPane; public JoglTabbedPaneError() { panel1 = new javax.swing.JPanel(); panel2 = new javax.swing.JPanel(); panel1.setLayout(new BorderLayout()); panel2.setLayout(new BorderLayout()); GLProfile profile = GLProfile.get(GLProfile.GL2); GLCapabilities glCapabilities = new GLCapabilities(profile); glCanvas = new GLCanvas(glCapabilities); panel1.add(glCanvas, BorderLayout.CENTER); tabbedPane = new JTabbedPane(); tabbedPane.addTab("tab1", panel1); tabbedPane.addTab("tab2", panel2); tabbedPane.addChangeListener(new javax.swing.event.ChangeListener() { @Override public void stateChanged(javax.swing.event.ChangeEvent evt) { if (glCanvas == null) { return; } if (tabbedPane.getSelectedIndex() == 0) { panel1.add(glCanvas, BorderLayout.CENTER); } else { panel2.add(glCanvas, BorderLayout.CENTER); } } }); setContentPane(tabbedPane); setSize(640,480); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } /** * @param args the command line arguments */ public static void main(String[] args) { new JoglTabbedPaneError().setVisible(true); } } If I use jogl 2.0.2 I can switch from tab1 to tab2 and viceversa and this problem doesn't appear