Bonjour à tous.
Mon problème est le suivant :
j'ai une JFrame, dans laquelle je met en ouest un JTree et au centre, un JPanel sans LayoutManager dans lequel je dessine des lignes selon l'objet selectionné dans le JTree.
J'ai donc surchargé mon JPanel comme suit :Pour réagir à la sélection d'un noeud dans mon JTree, je surcharge la méthode valueChanged() :
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 class panelGraphique extends JPanel { int scaleX, scaleY; Object[] os; public panelGraphique () { super(null); setBackground(Color.CYAN); os = new Object[0]; } public void setObjects(Object[] o) {os = o;} public void paintComponent(Graphics g) { super.paintComponent(g); System.out.println("Dans paintComponent"); // Dessin dans le panel selon os.. } }Dans valueChanged(), le System.out.println() affiche les bons objets, que je passe ensuite à mon JPanel personalisé.
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 public void valueChanged(TreeSelectionEvent e) { courant = (DefaultMutableTreeNode) Jarbre.getLastSelectedPathComponent(); if (courant == null) return; Object [] o = courant.getUserObjectPath(); for (int i=0; i<o.length; i++) System.out.print(o[i].toString()); paneGraph.setObjects(o); validate(); repaint(); }
Le problème, c'est que le paintComponent() de mon panel n'est appelé qu'une fois sur 2 quand je clique sur les noeuds de mon JTree (je le vois grâce au System.out.println dans paintComponent() ).
J'ai tenté de forcer un raffraichissement complet de ma JFrame à chaque fois, mais j'ai pas trouvé la bonne méthode... Même en faisant un appel explicite de paneGraph.repaint()...
Si quelqu'un a une idée...
Partager