JSplitPanes imbriqués

Résolu
Pimousse77 Messages postés 42 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 6 janvier 2005 - 24 sept. 2004 à 12:23
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 - 8 oct. 2004 à 23:42
Pimousse : débutant en java

Bonjour à tous,

Mon problème est le suivant :

J'ai une interface graphique que je veux couper en 3 parties rétractables, comme ça :

________________________
| |
|________partie 1_________|
| |
|_°______partie 2 ________|
| |
|________partie 3_________|

J'ai donc crée un premier Jsplitpane avec comme TopComponent la partie 1, et comme BottomComponent un autre JSplitPane qui contient lui les parties 1 et 2.

Jusque là ça marche à peu près excepté quelques bugs de Layout parfois. Le vrai problème c'est que l'on ma demandé (et je n'ai pas le choix) de faire UN SEUL bouton qui permet de rétracter les parties 1 et 3 pour n'avoir plus à l'écran que la partie 2. (C'est le petit °).

J'ai donc essayé de faire un

splitPane1.setDividerLocation(splitPane.getMinimumLocation());
splitPane2.setDividerLocation(splitPane.getMaximumLocation());

mais ca ne marche que pour le splitPane1. Celui se rétracte puis reprend sa taile originale quand je lui demande, pas de problème. Par contre le splitPane2 ne veut rien savoir ! J'ai mis des

println(splitPane.getDividerLocation());

Et je vois que la valeur de la position de la barre a bien été modifiée et poussée (à priori) à son maximum. Mais graphiquement la barre reste où elle est ! Jai bien essayé des repaint() et des updateUI() mais rien n'y fait.

En revanche, si j'essaie de bouger la barre "à la main", ca marche très bien et je peux retracter la partie 3 complètement.

Déjà merci de m'avoir lu jusqu'ici, et merci d'avance pour toutes vos idées, parceque moi là je commence à m'arracher les cheveux :(

28 réponses

cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
1 oct. 2004 à 17:28
GodConan :clown)

Bon voila :p) pas bien long finalement ;o)

appelant.getPanneauPrincipal().setDividerLocation(0);
appelant.getMiddleSplitedPane().updateUI();
appelant.getMiddleSplitedPane().setDividerLocation(appelant.getHeight() );

met ca ds ton action ;o) et ca marche ;o)

l update ui en fai il ne faut pas le faire sur l objet que tu vien de changer mais sur celui qui est consecutivement modifier ds son aparence ... ;o) par celui que tu vien de changer ;) Bref comme ca ca marche... ;o) par contre g mi la hauteur comme ca pour faire + simple ca depasse un peu mais de toute facon l objet recal en auto sur le bord ;o) dc c + simple que de calculler la taille de la barre + l inset etc ;o) mais si tu veu tu peu t amuser .. ;o)

bonne chance ... ;o)
et n abuse pas trop de VE ;o)
++
3
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
24 sept. 2004 à 19:36
GodConan :clown)

hmm c bizard moi j ustilise setdivederposition dab et cela fonctionne tres bien!!

quoi qu il en soit la tu va te retrouver avec les split bar en haut et en bas pas tres jolie ;-(
dc si tu veu vraiment faire cela a partir d une action fait varement disparaitre les splitpane et met ton panel direct a laffichage avec un border layout

il te suffi de faire une methode qui place les splites et la position des bar
une autre ki place les panel selon leur position
et une methode ki sauve les position de bar que tu les enleve.. ;o)

comme cela tu peu meem apliker la fonction aux 2 autre panel tres facilement... car pourkoi s areter ;o) a celui du centre ;o)

++
0
Pimousse77 Messages postés 42 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 6 janvier 2005
27 sept. 2004 à 09:54
Pimousse : débutant en java

En effet c'est malin, mais le problème c'est que l'on me demande de faire une interface graphique hyper modulable et facilement retouchable ou carrément remplacable. J'ai donc du séparer à chaque fois les parties traitement des parties purement graphiques.

Ce que j'essaye de dire c'est que si je fais ce que tu me dis, le traitement va devenir compliqué et le Visual Editor de Eclipse sera complètement paumé et incapable de faire une prévisualisation correcte. Or, on m'a demandé justement de séparer les parties purement graphiques pour qu'elles soient facilement retouchables sous VE... Donc du code "à la main" point trop n'en faut dans ma classe graphique.
0
Pimousse77 Messages postés 42 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 6 janvier 2005
27 sept. 2004 à 09:55
Pimousse : débutant en java

En tout cas merci beaucoup d'avoir répondu et de t'être penché sur le problème. Mais je ne comprend tout de même pas pourquoi celà marche pour une barre mais pas pour l'autre...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
27 sept. 2004 à 21:41
GodConan :clown)

il faut savoir ce que l on veu du cole modulable et dc configurable ou du code de BB retouchable par VE, que je n utilise jamais du reste... ;o) (il est vrai que ma conf n est pas tres musclé et VE est trop gourmand)
je l ai essayer et je trouve toujour plus rapide d utiliser comme au bon vieu temp ;o) mes ptt main ;o) pour coder mes mise en pages... ;o)

Ceci di separer les vue graphic des donnee ;o) c est faire preuve ;o) de raison... ;o)c est le concepte Documents / Vues.

et si tu veut une modullaritee et interchangeabilité maximum n oublie pas de faire ;o) toute les Interfaces...
0
Pimousse77 Messages postés 42 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 6 janvier 2005
28 sept. 2004 à 09:54
Pimousse : débutant en java

Vi vi j'ai bien fait des interfaces ne t'inquiète pas, une pour le noyau une pour l'interface graphique et une pour le support de données.
En ce qui concerne VE j'avoue que pour moi aussi c'est une grande première, jusqu'à présent je codais en warrior (non non pas sous le bloc note quand même ;) ) mais presque, juste un editeur avec coloration syntaxique.

Mais maintenant que je suis en stage et que je développe pour une société ben j'ai du me mettre à Eclipse (ce que je ne regrette pas d'ailleurs) et aussi à VE parceque bon. Les interfaces graphiques à la main j'en ai fait quelques unes mais pour des petits projets "perso".
Là j'attaque un progiciel de gestion commerciale, et comme j'ai que 6 mois devant moi... Enfin voilà quoi...

En tout cas le problème de ce SplitPane reste entier ! Pourquoi celui du bas ne veut pas changer graphiquement de position... Vraiment étrange...

Merci pour tes conseils
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
28 sept. 2004 à 18:52
GodConan :clown)

bon je vien de me pencher sur ton prob ;o) en refaisant un sample avec VE (ce qui ne change rien)
enfin bref g reussi a metre les split a fond ;o)
en utilisant la valeur 0 pour la pos mini et la position max selon l orientation tu prend contentpane.getWidth() ou getHeight()

car il semble que getmax et get min te donne les position en fonction de la taille mini de l element qui ce fait aplatir ;o)

++
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
28 sept. 2004 à 18:53
GodConan :clown)

scuse g di contenpane ;o) mais c plusto la taille du composent contenant le 1ere split ;o)
0
Pimousse77 Messages postés 42 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 6 janvier 2005
29 sept. 2004 à 11:08
Pimousse : débutant en java

Merci de t'être penché sur le problème, mais malheureusement comme je m'y attendais ca ne marche toujours pas...

En effet, je te rappelle ce que j'ai dit précedemment, c'est à dire que si je fais des

println(splitPane.getDividerLocation())

Je peux constater que la position de la barre a bien été modifiée, et (à priori ) du nombre correct de pixels.

C'est Graphiquement que celà ne marche pas, je pense vraiment que c'est un problème graphique. J'ai pourtant essayé de blinder le truc avec des repaint() et des updateUI() partout mais sans succès... De plus, si j'active le One Touch Expandable ou la possibilité de la bouger à la main, la barre descend très bien...

Je ne comprend vraiment pas où se situe le problème... Peut être au niveau des layouts des sous composants, mais c'est une intuition bidon car je n'ai aucun élément de réponse concret...

Vas tu t'accrocher ? Ou vas tu abandonner ? En tout cas moi je continue de chercher.

Merci et @ce soir donc ;)
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
29 sept. 2004 à 18:31
GodConan :clown)

ben c qd meme vraiment etonnant j ai tou refait comme toi avec VE et moi ca fonctionne .... donc je voi rien dautre que me fournir ton source si tu veu que je regarde ton bug car je n arrive pas a le reproduire ... ;o)
0
Pimousse77 Messages postés 42 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 6 janvier 2005
30 sept. 2004 à 12:58
Pimousse : débutant en java

Ben si ca ne te dérange pas oui ce serait vraiment sympa.
Je te met un .jar ici :

http://www.membres.lycos.fr/pimousse122/Gescom.jar

Il est executable directement, et pour l'instant il contient aussi les sources.

Les classes incriminées sont :

gui.cartes.CarteNouveauDocument
gui.cartes.TraitementsCarteNouveauDocument

Au niveau de l'éxécution tu pourras accéder à cette carte en allant dans l'onglet 2 et en faisant precedent ou suivant jusqu'à ce que tu tombes dessus. N'aie pas peur de l'aspect actuel du programme, ca fait très chantier ;o) ...

D'ailleurs, étant débutant, je prend tous les conseils et toutes les critiques que tu pourrais être amené à faire sur mon code. Je te remercie encore pour le temps que tu veux bien m'accorder. Et bonne chance, parceque c'est quand même très bizarre ;)
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
30 sept. 2004 à 18:27
GodConan :clown)
je regarde ca ;o)
0
Pimousse77 Messages postés 42 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 6 janvier 2005
1 oct. 2004 à 09:30
Pimousse : débutant en java

Ok merci, j'attend tes résultats d'analyse (ceux concernant mon programme hein ?! Me ramène pas une petite fiole jaune) ;)
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
1 oct. 2004 à 17:08
GodConan :clown)

;o) je n ai pas eu le temp de me pencher vraiment hier sur le prob ;o)
Mais l ensemble a l air asser jolie ;o), l utilisation d un singleton pour le listener est ;o) asser originale et inabituel ;o)
je pense que cela peu te crer des souci si tu a + sieurs appelant ;o) enfin test tu vera .. ;)

autrement g piger le bug mais voi pas encor coment le resoudre
:-( je men occupe .. ;o)
0
Pimousse77 Messages postés 42 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 6 janvier 2005
4 oct. 2004 à 10:27
Pimousse : débutant en java

Tout d'abord merci beaucoup ! Tu me tires une belle épine du pied !
Enfin ça marche, et surtout le plus important je pense avoir compris la solution (sinon aucun interêt).

C'est à dire qu'en fait je me suis dit qu'en faisant un updateUI() sur le composant le plus haut, ca cascaderait sur tous ceux du dessous mais c'est là que je me suis trompé, apparemment il faut bel et bien cibler le composant à updateUIter ;)

Merci pour le bonne chance, je vais en avoir besoin car maintenant il faut que je me prenne la tête avec des transferFocus() qui marchent pas. (Je veux que quand on appuie sur "Entrée" ca change de champ).
Mais bon... Comme dirait un personnage de fantasy que nous connaissons bien :

Ceci est une autre histoire ;)
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
4 oct. 2004 à 18:36
GodConan :clown)

ben entrer c pluto pour l action OK dabitude le changement de champ ce fait par TAB

;o)
0
Pimousse77 Messages postés 42 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 6 janvier 2005
5 oct. 2004 à 10:05
Pimousse : débutant en java

Bah je sais bien, mais bon moi je fais ce qu'on me demande... La touche Entrer doit valider le contenu du champ et passer au suivant, et la touche TAB garde ses fonctionnalités bien sûr...

P.Stout le monde: Ne vous étonnez pas si vous ne pouvez plus accéder au fichier .jar, on m'a demandé de le retirer...
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
5 oct. 2004 à 19:12
GodConan :clown)
T en fai pas je le publierai pas ;o) ... autrement pour ton prob regarde du coter des mapkey ou keystrok ( je ne sai plus trop)

Autrement JComponent cntient aussi la methode registerKeyboardAction que j utiliser aussi ;o)
Mais cela n enleve pas les actino deja defini par defaut sur les composent la il te faut redefinir le mapping il me semble kil y a deja eu la questino ds un forum...

GL
0
Pimousse77 Messages postés 42 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 6 janvier 2005
6 oct. 2004 à 10:16
Pimousse : débutant en java

Ben j'ai fait beaucoup plus simple que ça, en fait j'ai mis un KeyListener sur chaque composant "interessant". Il capture les evenements sur la touche "Entrée" et fait ensuite les traitements nécessaires, c'est bien car celà permet de mettre un traitement différent pour chaque type de composant. Car autant "Tab" doit toujours passer le Focus, autant la touche entrée doit fonctionner différemment.
Par exemple sur un JButton ca fait un doClick() ;o)

Et d'autres petites customisations aussi...
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
6 oct. 2004 à 18:28
GodConan :clown)

c sur si l action est diferente pour chac l abonement semble mieu
mais je te conseil qd meme l utilisation d une seul class KeyListener et de tester la source plutot que de faire N class
ca fait un peu plus organisé surtout si c pour intercepter toujour la meme touche... ;o)
++
0
Rejoignez-nous