[Debutant] Les mystères des LayoutManagers

Les mystères des LayoutManagers [Debutant] - Java - Programmation

Marsh Posté le 22-02-2008 à 12:15:11    

Bonjour,
Je suis débutant en Java, bon ayant fait beaucoup d'objet, sa logique m'est familière, car contre concernant Swing pour faire une IHM, j'ai vraiment beaucoup de mal à placer mes éléments.
Je m'explique :
Je fais en gros un chat P2P tout simple, le but est d'avoir une liste de connectés, une fenètre de chat etc etc...
Tout ça c'est pas très dur...pour le moment je fais des tests et je m'exerce, j'ai eu beaucoup de mal à faire des JTextArea avec des JScrollPane, mais j'ai réussi, seulement je galère avec leur positionnement, j'utilise différents LayoutManagers (en gros le Border et le Grid qui sont les deux que je connais) et le place les Panels dans le grille et recommence l'opération pour placer mes éléments dans le panel avec un autre LayoutManager, jusqu'ici tout va bien.
 
Seul problème, j'ai fait une console placée dans le south d'un BorderLayoutpour faire des tests en bas de mon application, en gros un pauvre Panel avec un ScrollPane et un TextArea le Panel est géré par un GridLayout (ça fait 1 élément, jaurais pu utiliser n'importe lequel en fait...). Bref je rempli le TextArea via un bouton dans un autre panel en marquant des "toto" etc etc tout se passe bien, le scroll descend bien, rien ne change, MAIS si je change la taille de la fenètre, ma console s'agrandit vers le haut en fonction du nombre de ligne envoyées dans la console. Et naturellement au bout d'un moment on voit plus que la console enfin ça bug à mort.
 
Questions :  
1 -je me suis fourvoyé dans l'utilisation des LayoutManagers? J'ai oublié de set un élément?  
2 - Auriez-vous un tutorial complet sur les LayoutManagers, car j'ai consulté la JavaDoc sur cet élément et il y a de très nombreux LayoutManagers en dehors de ceux principalement cités en tutorial (Flow,Grid,null,Border).
 
PS : j'ai scruté le forum et fait des recherches, mais j'ai pas trouvé d'aide simple avec surtout des exemple par l'image (rien n'est plus parlant qu'une image). J'ai pas encore utilise de GridBag, je pense qu'il pourrait répondre à mon problème, mais peut-être pas concernant ce changement de taille inopiné...

Reply

Marsh Posté le 22-02-2008 à 12:15:11   

Reply

Marsh Posté le 25-02-2008 à 11:18:01    

Parfait, je pense que je vais m'en sortir avec le lien de infres, voilà un document clair, avec des jolis dessins ^^ et le code lié avec qui explique qui fait quoi.
Je dirais si ça a pu m'aider à locker cette #%$! de size !
 
Merci

Reply

Marsh Posté le 26-02-2008 à 15:43:23    

J'ai testé, ça m'a permis d'organiser correctement ma fenètre, mais le problème reste le même. Quand je mes plusieurs lignes de texte, la scroll s'active on peut bien le faire défiler. Mais si je change la taille, eh bien la scroll/textarea change de taille à la taille maximum du texte et donc fait changer la hauteur générale de la ligne. On en revient au point de départ, impossible de dire à la scroll ou à la text area : "quand il y a un resize ou un repaint, ne te resize pas à la taille du texte que tu contiens, mais resize toi de façon normale quoi".

Reply

Marsh Posté le 26-02-2008 à 17:47:45    

As-tu essayé avec un "setPreferedSize" sur ton JscrollPane contenant la console.  
En général, cette méthode est assez efficace en Swing.


---------------
Un ordinateur sert à résoudre des problèmes qui n'existaient pas avant son invention.
Reply

Marsh Posté le 26-02-2008 à 20:00:48    

Ouai, je l'ai fait dans l'après-midi, j'ai mis le prefered size sur la scrollpane, par contre je comprend absolument rien à son comportement. En gros pour que ça marche, il faut que je mettre une prefered size à 1,1 c'est bizare, car sinon ça fonctionne (genre avec 200,200) et à un moment ça décroche et on revient au bug précédent...C'est plutôt obscur, enfin le tout c'est que ça marche...Enfin je fais pas tellement ça pour que ça marche, mais plutôt pour comprendre...La vérité est ailleur...mais où?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed