Bonjour à toutes et à tous!
J'ai un soucis de JPanel. Je m'explique, j'ai une fenêtre (M), un plateau (P) et différents cercles movables (CM) qui seront au final censés bouger sur P.
Les CM sont des formes (F) et F est la classe mère des formes qui sont sur P.
Donc, on a une construction en poupées russes: La fenêtre contient P et P contient des F.
Le soucis, c'est que P est dessiné avec la méthode surchargée paintComponent(Graphic g) et CM également (CM héritant de F), et la méthode surchargée de CM n'est jamais appelée, malgré que je fasse p.add(cm) et m.setContentPane(p), je ne vois que p et je ne vois pas le cm dans p. Par contre, si je fais m.setContentPane(cm), là, je verrai le cm mais uniquement le cm, je ne verrai pas p. Le soucis vient je pense qu'il y a du dessin (cm se dessine) dans un panel déjà dessiné (p se dessine aussi)...
En JAVA, cela s'agence comme ça:
Code:package testswing.classes; import javax.swing.JPanel; public abstract class F extends JPanel { public F() { super(null); } }Code:package testswing.classes; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; public final class CM extends F { public CM() { } @Override protected final void paintComponent(Graphics g) { super.paintComponent(g); System.out.println("paintComponent CM"); Graphics2D g2=(Graphics2D)g; setBounds(250, 0, 100, 100); g2.setColor(Color.GREEN); g2.fillRect(0, 0, getWidth(), getHeight()); g2.setColor(Color.RED); g2.fillOval(0, 0, 100, 100); } }Code:package testswing.classes; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.util.ArrayList; import java.util.List; import javax.swing.JPanel; public final class P extends JPanel { private final List<F> fs; public P() { super(null); fs=new ArrayList<F>(); } @Override protected final void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2=(Graphics2D)g; setBounds(0, 0, 600, 600); g2.setColor(Color.GREEN); g2.fillRect(0, 0, getWidth(), getHeight()); } public final void add(F f) { fs.add(f); add((JPanel)f); } }Code:package testswing.classes; import javax.swing.JFrame; public final class M extends JFrame { private final P p; public M(P p) { this.p=p; setContentPane(p); setTitle("Test"); setSize(650, 650); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } }Avec le Main, je vois donc p (un carré vert de 600 pixels de coté) mais je ne vois pas cm (qui est une boule rouge).Code:package testswing; import testswing.classes.CM; import testswing.classes.M; import testswing.classes.P; public class Main { public static void main(String[] args) { P p=new P(); CM cm=new CM(); p.add(cm); M m=new M(p); } }
Si vous pouviez m'aider à comprendre pourquoi ça ne fonctionne pas, je suis à votre écoute.
J'ai déjà essayé de foutre des cm.repaint() partout mais jamais la méthode surchargée de CM n'est appelée, c'est à en devenir fou.
Merci d'avance,
Aenonis
-----