Bonjour,
Il faudrait que je detecte quand apparait le scroll horizontal dans un Jscrollpane. Ce dernier peut en effet être redimensionné par l'utilisateur car il est dans un JSplitPane. Comment faire ceci ?
Merci d'avance
Version imprimable
Bonjour,
Il faudrait que je detecte quand apparait le scroll horizontal dans un Jscrollpane. Ce dernier peut en effet être redimensionné par l'utilisateur car il est dans un JSplitPane. Comment faire ceci ?
Merci d'avance
Normalement le JScrollPane gère ça tout seul. En effet le déplacement d'un JSplitPane fait en sorte que les composants internes soient revalidés, et donc leur layouts recalculés.
Si le problème est toujours celui des sujets précédents, la solution que j'ai proposé la semaine dernière fonctionne parfaitement dans un JSplitPane...
Bonjour,
C'est en effet en rapport. Ton WrapFlowLayout fonctionne en effet mais il a un bug. Dans une certaines configuration, que mon logiciel rencontre souvent, la méthode preferredLayoutSize n'est plus appelée lors du redimensionnement du JScrollPane et une barre apparait.
Je t'ai fais une vidéo pour que ça soit plus clair : http://www.lesmaisonsactua.com/Untit...s%20titre.html . Voici l'explication texte :
Cela se produit lorsque tu met tu ressert les barres déplaçables au maximum autour des boutons et que tu deplace la barre de droite vers les boutons, au premier coup le scroll vertical apparait (normal) et au deuxième le scroll vertical apparait et le JPanel n'est plus redimensionné car la méthode preferredLayoutSize n'est plus appelée
Un évènement créé lorsque le scroll horizontal apparait réglerai le soucis car on pourrait réappeler la méthode preferredLayoutSize manuellement.
As tu bien pris la version du WrapFlowLayout dont le getMinimumSize renvoie(c'est à dire celle que j'ai donné dans mon dernier post)?Code:new Dimension(0,0);
Car avec cette version le problème que tu décris n'existe pas.
Oui oui j'ai bien ça. Dans la vidéo j'ai vraiment fait un copier coller de ce que tu m'as donné dans un nouveau projet Eclipse et je l'ai lancé. Le problème est apparu. Pourquoi toi tu ne l'as pas ?
Quelle est la JRE que tu utilises?
J'ai fini par reproduire le problème, et trouvé un petit workaround, qui consiste à demander au JScrollPane de se bouger le cul en cas de redimensionnement:
C'est bourrin mais ça marche.Code:
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 JScrollPane scp = new JScrollPane(p); scp.addComponentListener(new ComponentListener() { @Override public void componentShown(ComponentEvent e) { scp.validate(); scp.getViewport().getView().validate(); } @Override public void componentResized(ComponentEvent e) { scp.validate(); scp.getViewport().getView().validate(); } @Override public void componentMoved(ComponentEvent e) { scp.validate(); scp.getViewport().getView().validate(); } @Override public void componentHidden(ComponentEvent e) { scp.validate(); scp.getViewport().getView().validate(); } });
Super merci beaucoup c'est ça la solution. Par contre je ne sais pas pourquoi j'avais encore le problème. Mais les évènements se déclenchaient au bon moment.
J'ai rajouté la ligne suivante dans componentResized et ça fonctionne enfin :
Au final le problème aura été bien compliqué pour faire ce qu'aurait du faire un simple FlowLayout.Code:p.setSize(MonWarpLayout.preferredLayoutSize(p));
Merci infiniment pour ton aide