Bonjour,
Voila j'ai un problème assez bateau mais pas moyen de le résoudre.
J'ai trois splitpanes imbriques et a l'appui d'une touche je voudrais remettre le splitter la ou je veux.
Cela marche pour 2 des trois mais pour le troisieme cela ne marche que si la hauteur du splitpane le contenant n'a pas ete touchee.
Comme un bout de code vaut mieux qu'un long discour:
Pour les gentlemen ayant pris la peine de tester la classe ci-dessus: lors de l'appui sur le bouton reset les splitpanes devraient etre agences comme suit:
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 import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JSplitPane; public class TestSplit extends JFrame { public TestSplit() { super(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent event) { System.exit(0); } }); Container contentPane = getContentPane(); contentPane.setLayout(new BorderLayout()); final JSplitPane split3 = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true, new JPanel(), new JPanel()); final JSplitPane split2 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, new JPanel(), split3); final JSplitPane split1 = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true); JButton but = new JButton("Reset"); but.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { split1.setDividerLocation(0.5); split2.setDividerLocation(0.7); split3.setDividerLocation(0.5); } }); split1.setTopComponent(but); split1.setBottomComponent(split2); split1.setDividerLocation(0.5); split2.setDividerLocation(0.7); split3.setDividerLocation(0.5); contentPane.add(split1, BorderLayout.CENTER); pack(); setSize(400, 400); show(); } public static void main(String[] args) { try { new TestSplit(); } catch (Exception e) { e.printStackTrace(); } } }
split1 (Le grand split vertical avec le bouton reset en haut): splitter a 50 %: ca c'est ok
split2 (Le split horizontal en bas de split1): splitter a 70 % ca c'est ok
split3 (Le split vertical a droite de split2): splitter a 50 % ca c'est pas bon et il faut recliquer sur reset pour le mettre a la bonne place.
Pour tester, il suffit de bouger le grand splitter horizontal, puis le petit splitter horizontal pour le mettre par exemple tout en bas, on clique sur reset .. et pas bon.
J'ai essaye avec des revalidate un peu partout, rien n'a change, j'ai essaye un delai avant de faire le setDividerLocation au cas ou ce serait un probleme de synchro dans l'EDT .. il s'en fout.
Alors si quelqu'un a une idee je suis preneur.
Merci d'avance,
Bulbo
Partager