Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2942 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java][Swing] Layout avec component centré non maximisé

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java][Swing] Layout avec component centré non maximisé

n°803109
raytaller
Posté le 22-07-2004 à 14:04:50  profilanswer
 

J'essaye de faire ça :
Une grande JFrame avec dedans :

  • des boutons sur les bords, des checkbox, des sliders etc...
  • au milieu une zone sur laquelle je vais faire plein de repaint parce que ce sera animé.


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 ?
 

  • Rajouter un truc qui va faire que mon JPanel ne sera pas maximisé si ça existe mais moi je connais pas
  • S'arranger avec des repaint(x,y,w,h), en fait je pense pas que niveau perfs ce soit terrible, et puis quoiqu'il en soit j'ai pas réussi à faire un truc qui marche avec
  • Créer un component de taille fixe à l'intérieur de mon JPanel, mais là encore, je ne sais pas comment le centrer (en x et y) sans qu'il soit maximisé (j'ai cherché aux alentours de BoxLayout mais non)


Voilà merci de vos conseils c'est mon deuxième jour de swing.


Message édité par raytaller le 22-07-2004 à 14:05:47
mood
Publicité
Posté le 22-07-2004 à 14:04:50  profilanswer
 

n°803118
nraynaud
lol
Posté le 22-07-2004 à 14:09:03  profilanswer
 

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)


Message édité par nraynaud le 22-07-2004 à 14:12:08
n°803124
raytaller
Posté le 22-07-2004 à 14:12:20  profilanswer
 

ok, merci, je vais regarder dans ta doc  :bounce:

n°803130
nraynaud
lol
Posté le 22-07-2004 à 14:13:54  profilanswer
 

bon, ça va les sarcasmes hein !

n°803132
raytaller
Posté le 22-07-2004 à 14:14:41  profilanswer
 

bon, j't'e'r'mercie  ;)

n°803157
raytaller
Posté le 22-07-2004 à 14:31:39  profilanswer
 

cependant :

Code :
  1. import java.awt.*;
  2. import javax.swing.*;
  3. public class RastereneseGUI {
  4. JFrame frame;
  5. public RastereneseGUI() {
  6.  frame=new JFrame("oui" );
  7.  frame.setLayout(new BorderLayout());
  8.  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  9.  JButton btn=new JButton("oiu" );
  10.  btn.setMaximumSize(new Dimension(100,100));
  11.  frame.add("Center",btn);
  12.  frame.setSize(400,500);
  13.  frame.setVisible(true);
  14. }
  15. public static void main(String args[]) {
  16.  new RastereneseGUI();
  17. }
  18. }


 
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 ?

n°803176
nraynaud
lol
Posté le 22-07-2004 à 14:40:36  profilanswer
 

en en mettant les preferedSize() à la même taille ?
 
J'ai jamais utilisé ces trucs en fait.

n°803185
nerisson
Pic-pic
Posté le 22-07-2004 à 14:43:47  profilanswer
 

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é.


---------------
Light is right
n°803188
raytaller
Posté le 22-07-2004 à 14:45:05  profilanswer
 

ôÔ mais ça fait une grille ça ?
c'est possible une grille à 5 cases...?

n°803189
Jubijub
Parce que je le VD bien
Posté le 22-07-2004 à 14:45:21  profilanswer
 

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...
 
[:benou_grillaid] 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 :
  1. ---------------------------------------
  2. |                                     |
  3. |                                     |
  4. ---------------------------------------
  5. |      |                      |       |
  6. |      |                      |       |
  7. |      |                      |       |
  8. |      |                      |       |
  9. |      |                      |       |
  10. |      |                      |       |
  11. |      |                      |       |
  12. |      |                      |       |
  13. |      |                      |       |
  14. |      |                      |       |
  15. |      |                      |       |
  16. ---------------------------------------
  17. |                                     |
  18. |                                     |
  19. ---------------------------------------


Message édité par Jubijub le 22-07-2004 à 14:48:51

---------------
Jubi Photos : Flickr - 500px
mood
Publicité
Posté le 22-07-2004 à 14:45:21  profilanswer
 

n°803192
raytaller
Posté le 22-07-2004 à 14:47:28  profilanswer
 

nraynaud a écrit :

en en mettant les preferedSize() à la même taille ?
 
J'ai jamais utilisé ces trucs en fait.


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 ?

n°803194
raytaller
Posté le 22-07-2004 à 14:48:31  profilanswer
 

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...
 
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...


ouaip, je vais tenter ça en effet
 
//edit
 

Jubijub a écrit :


l'ennui c que j'ai peur que le borderLayout force le composant en center à prendre la taille restante, auquel cas ca fera rien...


tout à fait


Message édité par raytaller le 22-07-2004 à 14:50:29
n°803195
Jubijub
Parce que je le VD bien
Posté le 22-07-2004 à 14:49:19  profilanswer
 

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)


Message édité par Jubijub le 22-07-2004 à 14:52:19

---------------
Jubi Photos : Flickr - 500px
n°803200
raytaller
Posté le 22-07-2004 à 14:52:44  profilanswer
 

bien merci, je vais tenter la technique de (nerisson+Jubijub) de ce pas.

n°803241
Jubijub
Parce que je le VD bien
Posté le 22-07-2004 à 15:16:52  profilanswer
 

http://java.sun.com/docs/books/tut [...] idbag.html
 
super aide mémoire des constraints...


---------------
Jubi Photos : Flickr - 500px
n°803386
raytaller
Posté le 22-07-2004 à 16:17:16  profilanswer
 

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 :
  1. import java.awt.*;
  2. import javax.swing.*;
  3. public class Test extends JFrame{
  4. JButton p1,p2,p3,p4,p5;
  5. JPanel pane;
  6. public Test(){
  7.  super(":D hahaha..." );
  8.  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  9.  pane=new JPanel();
  10.  p1=new JButton("1" );
  11.  p2=new JButton("2" );
  12.  p3=new JButton("3" );
  13.  p4=new JButton("4" );
  14.  p5=new JButton("5" );
  15.  GridBagLayout gbl=new GridBagLayout();
  16.  GridBagConstraints cons=new GridBagConstraints();
  17.  pane.setLayout(gbl);
  18.  bc(cons,0,0,3,1,1,1);
  19.  gbl.setConstraints(p1,cons);
  20.  bc(cons,0,1,1,1,0.5,0);
  21.  gbl.setConstraints(p2,cons);
  22.  bc(cons,1,1,1,1,0,0);
  23.  p3.setPreferredSize(new Dimension(300,400));
  24.  gbl.setConstraints(p3,cons);
  25.  bc(cons,2,1,1,1,0.5,0);
  26.  gbl.setConstraints(p4,cons);
  27.  bc(cons,0,2,3,1,1,1);
  28.  gbl.setConstraints(p5,cons);
  29.  pane.add(p1);
  30.  pane.add(p2);
  31.  pane.add(p3);
  32.  pane.add(p4);
  33.  pane.add(p5);
  34.  setContentPane(pane);
  35.  setSize(400,500);
  36.  setPreferredSize(new Dimension(400,500));
  37.  setVisible(true);
  38. }
  39. void bc(GridBagConstraints g, int gx, int gy, int gw, int gh, double wx, double wy){
  40.  g.gridx=gx;
  41.  g.gridy=gy;
  42.  g.gridwidth=gw;
  43.  g.gridheight=gh;
  44.  g.weightx=wx;
  45.  g.weighty=wy;
  46. }
  47. public static void main(String args[]){
  48.  new Test();
  49. }
  50. }


 
Bon, les noms sont pas terribles mais c'était juste pour un proto.
Bien merci !

n°803429
Jubijub
Parce que je le VD bien
Posté le 22-07-2004 à 16:38:44  profilanswer
 

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...


---------------
Jubi Photos : Flickr - 500px
n°803501
raytaller
Posté le 22-07-2004 à 17:08:58  profilanswer
 

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 [:dawa]

n°803559
Jubijub
Parce que je le VD bien
Posté le 22-07-2004 à 17:33:29  profilanswer
 

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...


---------------
Jubi Photos : Flickr - 500px
n°803570
nraynaud
lol
Posté le 22-07-2004 à 17:36:32  profilanswer
 

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 ?

n°803641
raytaller
Posté le 22-07-2004 à 18:08:48  profilanswer
 

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.


Message édité par raytaller le 22-07-2004 à 18:16:01
n°803646
raytaller
Posté le 22-07-2004 à 18:11:43  profilanswer
 

Jubijub a écrit :


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...


 
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.

n°805333
raytaller
Posté le 24-07-2004 à 15:02:17  profilanswer
 

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 !

n°806032
Jubijub
Parce que je le VD bien
Posté le 26-07-2004 à 09:40:45  profilanswer
 

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...


---------------
Jubi Photos : Flickr - 500px
n°806144
raytaller
Posté le 26-07-2004 à 11:13:19  profilanswer
 

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.

n°806149
Jubijub
Parce que je le VD bien
Posté le 26-07-2004 à 11:15:23  profilanswer
 

pour une boite de dialog selon ce que t'a à mettre un border peut suffir :D


---------------
Jubi Photos : Flickr - 500px
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java][Swing] Layout avec component centré non maximisé

 

Sujets relatifs
[java] peut on gérer des fichiers excel ?Parser une structure XML en Java
probleme JAVA (applet)[divers] En votre âme, et consience, vous croyez que java a un avenir?
[Servlet Java] [Php] [Socket] Circulation des données Java <-> Php[java] tester si un fichier existe
pop up centré passant a travers les anti pop up [résolu][JAVA] Imprimer le contenu d'un TextArea
[Java] Fusionner des types "Enumeration"[java] exporter en jpeg, gif
Plus de sujets relatifs à : [Java][Swing] Layout avec component centré non maximisé


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR