Layout avec component centré non maximisé [Java][Swing] - Java - Programmation
Marsh Posté le 22-07-2004 à 14:09:03
file:///C:/Documents%20and%20Settings/Nicolas/Bureau/docs_java/api/javax/swing/JComponent.html#setMaximumSize(java.awt.Dimension)
edit : et merde, j'étais en local !
http://java.sun.com/j2se/1.4.2/doc [...] Dimension)
Marsh Posté le 22-07-2004 à 14:31:39
cependant :
Code :
|
me donne un joli JButton dégradé (quel horreur ce nouveau look n feel) en plein écran dans la JFrame.
de plus, si j'arrive à réduire ça taille, il sera à gauche dans la case centrée du layout, pas centré dans sa case centrée du layout me trompé-je ?
Marsh Posté le 22-07-2004 à 14:40:36
en en mettant les preferedSize() à la même taille ?
J'ai jamais utilisé ces trucs en fait.
Marsh Posté le 22-07-2004 à 14:43:47
Si tu utilisait plutot un GridBagLayout avec 5 composants.
Un au centre qui ne bouge pas, a qui tu as donné une taille fixe.
Un en haut et un en bas qui prennent chacun 50% de l'espace vertical redimensionné.
Un à droite et un à gauche qui prennent chacun 50% de l'espace hoizontal redimensionné.
Marsh Posté le 22-07-2004 à 14:45:05
ôÔ mais ça fait une grille ça ?
c'est possible une grille à 5 cases...?
Marsh Posté le 22-07-2004 à 14:45:21
heu je crois qu'il faut que tu règles le minimumSize() et le preferredSize()...selon les layout, le gestionnaire se base sur l'un ou sur l'autre...
l'ennui c que j'ai peur que le borderLayout force le composant en center à prendre la taille restante, auquel cas ca fera rien...
tu peux tester un gridBagLayout en 3x3, dont le composant 2x2 est celui que tu veux repaint...
par nerisson...
pour faire son truc, tu declare un gridbag 3x3 ...
le composant du haut a un gribagConstraint à c.gridwidth(3) comme ca il prend les 3 colonnes, idem pour celui du bas...
ca donne :
Code :
|
Marsh Posté le 22-07-2004 à 14:47:28
nraynaud a écrit : en en mettant les preferedSize() à la même taille ? |
c'est parce que tes qualités de développeur java et swing font que jamais tu n'as été amené à utiliser ça, car tu avais toujours mieux, ou c'est juste que c'est pas ton domaine ?
Marsh Posté le 22-07-2004 à 14:48:31
Jubijub a écrit : heu je crois qu'il faut que tu règles le minimumSize() et le preferredSize()...selon les layout, le gestionnaire se base sur l'un ou sur l'autre... |
ouaip, je vais tenter ça en effet
//edit
Jubijub a écrit : |
tout à fait
Marsh Posté le 22-07-2004 à 14:49:19
j'ai édité depuis...pense à bien faire comme nerisson précise :
au composant du haut, et celui du bas, met leur un weighty de 0.5 , et les composants horizontaux un weightx de 0.5 ...celui du milieu spécifie lui bien weighty et weighty = 0 (pour qu'il ne prenne pas d'espace)...
et fixe la size de celui du milieu (c la preferred normalement)
Marsh Posté le 22-07-2004 à 14:52:44
bien merci, je vais tenter la technique de (nerisson+Jubijub) de ce pas.
Marsh Posté le 22-07-2004 à 15:16:52
http://java.sun.com/docs/books/tut [...] idbag.html
super aide mémoire des constraints...
Marsh Posté le 22-07-2004 à 16:17:16
Fiooo !
Bon après 1 heure et demie de bricolage ça y est, j'y suis arrivé. Donc effectivement c'était ça. Je poste le code au cazou ça intéresse(ra) quelqu'un (pis y'a ptet des trucs à améliorer ou chépaquoi).
Code :
|
Bon, les noms sont pas terribles mais c'était juste pour un proto.
Bien merci !
Marsh Posté le 22-07-2004 à 17:08:58
Jubijub a écrit : tiens c pas con l'idée de créer une méthode bc pour accélérer les choses...mais c bcp moins lisible ensuite je trouve... |
c'est vrai, mais je suis pas sur qu'on puisse avoir les deux en même temps en fait.
enfin bon, j'ai vu ça dans un livre moi hein
Marsh Posté le 22-07-2004 à 17:33:29
c pareil...le pb de ton sys, c que tu réassignes les constraints à chaque passage..
par ex :
c = grdibagcontraints
bon :
c.gridx = 0;
c.gridy = 0;
frame.getContentpane().add(composant1,c);
c.gridx = 1;
grame.getContentPane().add(composant2,c);
je n'ai pas respécifié gridy = 0, c implicite, l'état de l'objet n'a pas changé...
en fait ton truc réassigne tt les valeurs des constraints à chaque passage, alors que bcp restent identique d'un composant à ajouter à l'autre...
c surement optimisé à la compilation et probablement par la VM aussi, mais c pas logique...
Marsh Posté le 22-07-2004 à 17:36:32
raytaller a écrit : c'est parce que tes qualités de développeur java et swing font que jamais tu n'as été amené à utiliser ça, car tu avais toujours mieux, ou c'est juste que c'est pas ton domaine ? |
parce que je code pas ?
Marsh Posté le 22-07-2004 à 18:08:48
nraynaud a écrit : parce que je code pas ? |
Mhh... là je suis incapable de répondre à cette question.
Si, à priori là comme ça je dirai oui mais je peux pas savoir en fait.
//edit :
je dirais pas oui, je dirais non, faisant aisi la négation de la négation.
je dirais que ("je code pas ?" ) vaut false. enfin, dit par toi.
Marsh Posté le 22-07-2004 à 18:11:43
Jubijub a écrit : |
Absolument d'accord, cependant, comme j'ai changé ça 50 fois pour mes tests, et comme au quotidien, j'ai assez de mal à réflchir et à me concentrer, je suis presque incapable de me souvenir de l'état d'une variable après 5 lignes.
Moi, remonter 1, 2, 3 lignes en arrière pour vérifier si c'est à la bonne valeur et tout surtout avec ces gridx et gridy c'est hors de ma portée.
Mais effectivement, un développeur intelligent fera ça bien.
Marsh Posté le 24-07-2004 à 15:02:17
hahaha...
hem hem.. juste pour dire qu'en fait, on s'est tous bien pris la tête, le layout GridBagLayout fait ça direct, il suffit de mettre un seul component au milieu avec un preferredSize fixé et hop, il le centre et il le maximise pas.
je viens de m'en rendre compte en essayant netBeans et putain, c'est vraiment de la bombe. Je vais pas l'utiliser pour développer des gros projets c'est clair mais je vais faire mes GUI dessus, et paf, récupérer le code sous eclise, un coup de refactor pour changer les noms de variables en mousse par défaut et voilà un joli code swing qu'il est beau.
malgré ça, merci d'avoir su m'orienter !
Marsh Posté le 26-07-2004 à 09:40:45
et qd tu redimensionnes ca donne quoi ???
c bon à savoir néenmoins, même si je préfère fixer les choses : si tu mets à jour le truc, tu peux oublier que t'avais laissé une comportement par défaut, et ca risque de poser des couilles...
==>gridBag roulaize, une fois que tu le maitrises, t'a plus besoin de connaitre les autres, à part peut etre le border (qui sert encore bcp)....et tu peux tout faire...rmq non, y'a le cardLayout qui a un comportement particulier paramétré avec...
Marsh Posté le 26-07-2004 à 11:13:19
Jubijub a écrit : et qd tu redimensionnes ca donne quoi ??? |
ça se centre, mais ça garde la taille choisie avec preferredSize()
ouais gridBag c'est pratique mais c'est chiant à paramétrer, pour une dialog toute simple, tu te retrouves facilement avec 30 lignes de code, c'est relou.
Marsh Posté le 22-07-2004 à 14:04:50
J'essaye de faire ça :
Une grande JFrame avec dedans :
pour ça j'ai commencé à faire un BorderLayout avec mes trucs utiles et tout mon ptit bordel sur les côtés, pis au centre un JPanel pour animer.
Le problème : le JPanel s'étend au max donc sa taille varie, et moi je dois avoir une taille fixe de dessin dessus.
Pourquoi ne pas animer mon truc au milieu et ne pas m'occuper de tout ce qu'il y a autour ? Parce que si j'anime un truc à 70 fps et que le mec est en 1600*1200 plein écran, je me vois pas appeler des repaint sur une surface comme ça à chaque frame. De plus, ce qu'il y à autour de cette zone d'animation sera sûrement de la deco à long terme, et ya aucune raison de redessiner ça à chaque frame.
Il faudrait en fait que le repaint se fasse que sur ma petite zone d'animation fixe.
Que puis-je faire ?
Voilà merci de vos conseils c'est mon deuxième jour de swing.
Message édité par raytaller le 22-07-2004 à 14:05:47