Je recommande vraiment de voir Box. Quelque chose comme (pas teste):
Code:
1
2
3
4
5 Box box = Box.createVerticalBox(); panelResultat.add(box); box.add(getLblResultat()); box.add(Box.createVerticalStrut(4)); box.add(getTxtResultat());
Version imprimable
Je recommande vraiment de voir Box. Quelque chose comme (pas teste):
Code:
1
2
3
4
5 Box box = Box.createVerticalBox(); panelResultat.add(box); box.add(getLblResultat()); box.add(Box.createVerticalStrut(4)); box.add(getTxtResultat());
Bon je crois que je vais laisser tomber... je perds trop de temps la dessus et rien ne marche comme je veux. Que ce soit avex box, borderlayout, gridbag, gridbaglayout... :oops:
Est ce que vous connaissez un plug in pour eclipse permettant de placer les composants simplement sans devoir y passer des jours? Merci d'avance
Moi je me rends compte que j'étais pas très clair.
Fais moi ça plutôt ;)
Le panel1, c'est ton carré avec "Texte à modifier", ect
Le panel2, c'est ton "Résultat", ect
Insère ça dans ta classe qui hérite de JFrame :
Après c'est pareil pour tes panel1 et panel2, il faut que tu aies plusieurs panels à l'intérieur. Tu te serviras des RIGHT, LEFT, NORTH, SOUTH et CENTER pour bien agencer tes composants.Code:
1
2
3
4
5 JPanel mainPanel = new JPanel(new BorderLayout()); this.mainPanel.add(BorderLayout.RIGHT, panel1); this.mainPanel.add(BorderLayout.LEFT, panel2); //Définir le mainPanel comme le panel de ta fenêtre. this.setContentPane(mainPanel);
Le tout est de bien comprendre le truc ^^
Je suis tout à fait d'accord avec Larger. La gestion des layout est relativement simple, mais il faut prendre le temps de bien réfléchir la disposition des différents éléments et ne pas hésiter à imbriquer de multiples panels.
Reprenons et complétons un peu l'exemple de Larger... (j'ai d'ailleurs corrigé une petite coquille qu'il avait fait sur le constructeur JPanel... ;) )
Voilà, avec ça tu devrais déjà avoir quelque chose qui ressemble à ce que tu attends du côté droit. De la même façon, tu peux dessiner le côté gauche. Je te laisse après adapter le tout pour garder une référence vers ton JTextArea pour pourvoir remplacer le texte quand tu cliqueras sur ton bouton...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24JPanel mainPanel = new JPanel(new BorderLayout()); this.mainPanel.add(getPanelOutput(), BorderLayout.RIGHT); this.mainPanel.add(getPanelInput(), BorderLayout.LEFT); //Définir le mainPanel comme le panel de ta fenêtre. this.setContentPane(mainPanel); [...] private JPanel getOutputanel() { JPanel panelOutput = new JPanel(new BorderLayout()); panelOutput.add(new JLabel("Résultat"), BorderLayout.NORTH); panelOutput.add(getResultPanel(), BorderLayout.CENTER); return panelOutput; } private JPanel getResultPanel() { JPanel panelResults = new JPanel(new BorderLayout()); JTextArea myJTextArea = new JTextArea(); myJTextArea.setPreferredSize(new Dimension(50, 50)); panelResults.add(myJTextArea, BorderLayout.NORTH); return panelResults; }
Qu'est-ce qui ne convient pas avec Box?
J'ai essaye, ca a l'air de marcher. Le seul truc c'est que le Label est pas completement a gauche. Un petit coup de BorderLayout arrange ca
En imbriquant des Box et des JPanel avec BorderLayout comme il faut, tu devrais avoir exactement ce que tu veux.Code:
1
2
3
4
5
6
7 Box box = Box.createVerticalBox(); panelResultat.add(box); JPanel aligneLabel = new JPanel(new BorderLayout()); aligneLabel.add(getLblResultat(), BorderLayout.WEST); box.add(aligneLabel); box.add(Box.createVerticalStrut(4)); box.add(getTxtResultat());
Tu es sous quel systeme d'exploitation pour Eclipse?
Merci.
Ca marche mais moi c'est un JTextField que j'aimerai utiliser. Et problème, ce composant prend toute la place réservée et "devient" donc un textarea :aie: J'ai l'impression qu'on est pas aussi libre que dans delphi par exemple ou tu dessines vraiment ce que tu veux niveau interface. Si je fais une grande fenêtre, j'ai pas mon composant qui s'élargit automatiquement.
Ouais c'est un problème de ce genre la que j'avais :oops: Je vais réessayer encore une fois merci ^^Citation:
Qu'est-ce qui ne convient pas avec Box?
J'ai essaye, ca a l'air de marcher. Le seul truc c'est que le Label est pas completement a gauche. Un petit coup de BorderLayout arrange ca
Pour eclipse j'utilise la version 3.4 sous Windows xp.
Allons, allons, ne sois pas trop dur avec toi ;)
VisualEditor ou GEF entre autres. Perso j'aime bien maitriser mes interfaces, car tu verras que les editeurs graphiques ont souvent tendances à faire du code bien dégueulasse et le jour ou tu veux faire de la maintenance, ça peut être cauchemardesque. C'est bien pour développer très vite, mais pas pour maintenir ni comprendre ce qui se passe ;)
http://eclipse.developpez.com/faq/?p...echargerPlugin
http://www.eclipseplugincentral.com/
http://eclipse-plugins.2y.net/eclipse/index.jsp
Alors là je suis entièrement d'accord ! Je suis sous NetBeans où on peut utiliser un Form qui te permet d'agencer tes composants. J'ai récupéré les classes faites par ce biais. J'essaye juste de changer un JScrollPane en JPanel. Ben j'y arrive pas :evilred:
Je déconseille ...
Merci. Enfin c'est surtout pour apprendre comment ça marche, parceque pour l'instant j'ai du mal à comprendre la logique.
Si je comprends bien,
- les borderLayout élargissent les composants pour qu'ils prennent toute la place possible
- la taille des cellules d'un gridbadlayout dépend de la taille du layout donc dans mon cas c'est normal que mes champs soient si espacés puisque chaque ligne fait 50% de la taille du container.
Je vais retenter avec une box :P
En fait, je trouvais ca curieux de devoir avoir recours a un JPanel pour aligner comme il faut. Eh bien, on dirait que c'etait prevu et il y a une solution simple:
http://java.sun.com/docs/books/tutor...html#alignment
Le probleme dans notre cas est que JTextField n'a pas un alignement gauche par defaut. Il faut donc faire
Code:
1
2
3
4
5
6
7 Box box = Box.createVerticalBox(); panelResultat.add(box); box.add(getLblResultat()); box.add(Box.createVerticalStrut(4)); JTextField saisie = getTxtResultat(); saisie.setAlignmentX(box.LEFT_ALIGNMENT); box.add(saisie);
Je viens de tester, ça a l'air plus simple de passer par des box :D
Pour ce que je veux faire, est ce qu'utilise un BoxLayout est recommandé? C'est le seul container que j'arrive à utiliser correctement pour l'instant :yaisse2: En plus toutes ces options pour ajouter des espaces entre les composants, miam ça me plait j'ai l'impression qu'on peut faire plus de choses avec ça.
C'est clair, c'est 100x plus simple que GridbagLayout. :yaisse2:
Assure-toi juste que tous ceux qui accedent ton appli l'ont bien (ca existait deja dans Java 1.3 donc a priori pas de souci)
Merci en tout cas ^^
Question bête mais j'utilise un BoxLayout, est ce que je suis obligé d'utiliser un Box.createVerticalBox() ?
Sans ça fonctionne mais mes composants ne sont pas alignés tout à gauche. Par contre si j'utilise une Box (avec createVerticalBox), ça s'aligne bien.
Edit : arf le problème vient de moi en fait, c'est mon createRigidArea qui m'ajoute cette bordure vu que je lui ai mis une dimension de 50 X 50 :sm:
http://www.noelshack.com/uploads/boxlayout086424.png
Rebonjour
J'aimerai faire en sorte que mes deux cadres aient la même taille car actuellement, mon layout principal est un FlowLayout.
http://www.noelshack.com/uploads/ave...yout067678.png
J'ai tenté avec un BorderLayout mais mes composants s'agrandissent, ça va pas du tout :mur:
http://www.noelshack.com/uploads/ave...yout045807.png
Je tiens à préciser que mes deux cadres sont des panels à base de BoxLayout. Quelle solution pour que mes deux cadres aient la même taille et qu'ils soient à la même hauteur sans que mes composants soient déformés?
Merci d'avance
T'as essaye setPreferredSize?
Non mais si je donne la même preferedSize aux deux panels, les composants de mon deuxième cadre ne conservent pas leur taille d'origine.
Ce qui donne avec un flowlayout :Code:
1
2
3 panelResultat.setPreferredSize(new Dimension(205,94)); panelBouton.setPreferredSize(new Dimension(205,94));
http://www.noelshack.com/uploads/Sanstitre-3055170.png
Il te faut un peu de "glue" pour occuper l'espace en-dessous du champ de saisie
Essaie
Code:panelResultat.add(Box.createVerticalGlue());
Merci c'est fait. Par contre glue ou pas glue, je vois pas la différence avec mon flowlayout.
http://www.noelshack.com/uploads/Sanstitre-3055170.png
Le code de mon panel:
Par contre avec un filler, j'obtiens quelque chose de pas mal: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 private JPanel getPanelResultat() { // création d'un panel if (panelResultat == null) { panelResultat = new JPanel(); panelResultat.setBackground(Color.WHITE); panelResultat.setPreferredSize(new Dimension(205,94)); panelResultat.setLayout(new BoxLayout(panelResultat, BoxLayout.Y_AXIS)); // création d'une box Box box = Box.createVerticalBox(); // crée une séparation horizontale de 10 box.add(Box.createRigidArea(new Dimension(10, 0))); // ajoute les champs box.add(getLblResultat()); box.add(getTxtResultat()); box.add(Box.createVerticalGlue()); // ajoute la box au panel panelResultat.add(box); }
http://www.noelshack.com/uploads/feeler002052.png
C'est curieux. Peut-etre que la Glue ne marche que s'il y a un element apres, par exemple un VerticalStrut. Faut tester.
Modif: Bien le Filler!
Tu n'as pas besoin d'avoir a la fois un BoxLayout et un Box a priori.