Salut,
je dessine sur un JPanel et j'ai un problème de repaint. Lorsque un sous-menu de la barre de menu apparaît puis qu'il disparaît, ce qui est dessiné en dessous du menu disparaît. Enfin, en fait ça dépend de la méthode que j'utilise.
J'ai une classe qui étend JPanel et je redéfinis paint(Graphics g) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
	@Override
	public void paint(Graphics g) {
		super.paint(g);
		g.drawRect(0, 0, 50, 50);
	}
Ceci fonctionne, et le rectangle est retracé lorsque le sous-menu disparaît.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
	@Override
	public void paint(Graphics g) {
		super.paint(g);
		this.getGraphics().drawRect(0, 0, 50, 50);
	}
Ceci ne fonctionne pas, le rectangle est bien tracé mais la partie du rectangle qui est sous le menu n'est pas redessinée. Je ne comprends pas très bien pourquoi. J'imagine que les 2 Graphics sont différents mais d'où vient l'argument réel g lors d'un appel à cet méthode ?

Le problème final est que je veux pouvoir dessiner sur un JPanel depuis une méthode d'une autre classe qui serait appelé dans paint(Graphics g) du JPanel, ex. dans ma classe qui étends JPanel :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
public class DrawingJPanel extends JPanel {
 
	private JPanelDrawer drawer;
 
	@Override
	public void paint(Graphics g) {
		super.paint(g);
		this.drawer.draw();
	}
}
Et mon autre classe raccourcie :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
public class JPanelDrawer extends Drawer {
 
	// Classe qui étend le JPanel et redéfinit paint(Graphics g)
	private DrawingJPanel drawingPanel;
 
 
	public void draw()	{
		this.drawingPanel.getGraphics().drawRect(0, 0, 50, 50);
	}
}
Mais ceci ne fonctionne pas non plus, le rectangle n'est pas rafraichie.
Enfin bref, le but réellement final étant simplement de tracer sur un JPanel et que tout soit bien retracé même si un menu apparaît/disparaît, quelqu'un aurait-il une idée sur la question ?
En vous remerciant.