Bonjour,

J'essaie de construire un widget OpenGL réutilisable pour Swing à partir d'un JPanel et d'un GLCanvas (pour éviter les problèmes de perf de GLJPanel)

J'ai un problème pour faire afficher les menu contextuels Swing sur la surface d'affichage du GLCanvas.

Pour illustrer ce problème, j'ai écrit un petit programme de test :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
import java.awt.BorderLayout;
 
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
 
public class GLW extends JPanel{
	private static final long serialVersionUID = 1L;
	private GLWCanvas canvas;
	private JPopupMenu popupmenu;
	private JMenuItem jMenuItem0;
 
	public GLW() {
		JPopupMenu.setDefaultLightWeightPopupEnabled(false);
		this.setLayout(new BorderLayout());
		this.setComponentPopupMenu(getJPopupMenu0());
		this.add(getMixTestCanvas()); // ajout du widget hérité de GLCanvas
	}
 
	private GLWCanvas getMixTestCanvas(){
		if (canvas == null) {
			canvas = new GLWCanvas();
			canvas.addGLEventListener(canvas);
		}
		return canvas;
	}
 
	private JPopupMenu getJPopupMenu0() {
		if (popupmenu == null) {
			popupmenu = new JPopupMenu();
			popupmenu.add(getJMenuItem0());
		}
		return popupmenu;
	}
 
	private JMenuItem getJMenuItem0() {
		if (jMenuItem0 == null) {
			jMenuItem0 = new JMenuItem();
			jMenuItem0.setText("jMenuItem0");
 
		}
		return jMenuItem0;
	}
}
Dans ce code le GLWCanvas est une classe héritée de GLCanvas.
Lorsque je commente la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
this.add(getMixTestCanvas());
le widget hérité de GLCanvas n'est pas affiché et le menu contextuel marche bien. Jusque là, tout est normal.

Par contre lorsque je décommente cette ligne, le widget hérité de GLCanvas est affiché (là encore, tout est normal), mais le menu contextuel ne s'affiche pas (et là, c'est peut-être normal au vu de mon code, mais c'est pas du tout ce que je veux !).

J'ai bien essayé de désactivé le caractère lightweight du JPanel avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
mais cela semble sans effet. Est-ce que quelqu'un aurait une idée pour me permettre d'arriver à mes fins ?

Merci d'avance.

jMax