Bonjour
J'ai un panel contenant plusieurs Components. Ces Components n'ont pas à changer, mais les panels qui les contiennent peuvent être changés. Le soucis est que lorsque que je remet dans mon panel ces nouveaux sous-panel, les Components ne s'affichent plus ... Exemple simplifié du soucis :
Pour l'utilisation : cliquez simplement sur les splitpane pour que la fenêtre "remette" les components et constatez qu'ils n'apparaissent plus ... J'avais essayer d'enregistrer le SplitPane principal pour le supprimer avant de le remettre mais ça ne change rien :s
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98 import java.awt.AWTEvent; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Toolkit; import java.awt.event.AWTEventListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSplitPane; import javax.swing.plaf.basic.BasicSplitPaneDivider; public class Test extends JPanel implements MouseListener { private ArrayList<Component> comps; public Test () { super(new BorderLayout()); comps = new ArrayList<Component>(); comps.add(new JLabel("0")); comps.add(new JLabel("1")); comps.add(new JLabel("2")); Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() { @Override public void eventDispatched (AWTEvent event) { Object source = event.getSource(); if (source instanceof BasicSplitPaneDivider) return; else if (source instanceof Component) { Component c = (Component) source; if (isParentOf(c)) Test.this.processEvent(event); } } }, MouseEvent.MOUSE_EVENT_MASK); redoContent(); addMouseListener(this); } protected boolean isParentOf (Component c) { while (c.getParent() != null) { if (c.getParent() == this) return true; c = c.getParent(); } return false; } private void redoContent () { JSplitPane content = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, comps.get(1), comps.get(2)); content = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, comps.get(0), content); add(content, BorderLayout.CENTER); } @Override public void mouseClicked (MouseEvent arg0) { redoContent(); System.out.println("Done"); } @Override public void mouseEntered (MouseEvent arg0) {} @Override public void mouseExited (MouseEvent arg0) {} @Override public void mousePressed (MouseEvent arg0) {} @Override public void mouseReleased (MouseEvent arg0) {} public static void main (String[] args) { JFrame f = new JFrame(); f.setSize(640, 480); f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); f.setContentPane(new Test()); f.setVisible(true); } }
Une idée pour résoudre ceci ?
Partager