Positionner les widgets avec les layouts
Résolu
josep-t
-
josep-t -
josep-t -
Bonjour,
Je suis en train de créer une fenêtre qui comprend 3 JTextField associés chacun à un bouton :
- 1ère ligne : 1textField, 1bouton
- 2ème ligne : 1textField, 1bouton
- 3ème ligne : 1textField, 1bouton
Puis tout en dessous, à droite de préférence, un bouton qui exécute tout mon programme.
Je ne suis pas très doué avec les layouts. Je pensais créer par exemple, un JPanel qui comprend mes 3 lignes de JTextField avec leur bouton et tout ca avec un GridLayout(3,2). Puis l'autre bouton dans un autre JPanel.
J'ai réussi à positionner mes JTextField avec les boutons, mais seulement je ne sais pas comment ajouter le dernier bouton en dessous à droite...De plus j'aimerai que mes widgets ne prennent pas tout l'espace de ma fenêtre, et que mes boutons à droite de mes JTextField soient plus petits (des petits carrés).
Quelqu'un pourrait-il m'aider sur la façon de procéder?
Je suis en train de créer une fenêtre qui comprend 3 JTextField associés chacun à un bouton :
- 1ère ligne : 1textField, 1bouton
- 2ème ligne : 1textField, 1bouton
- 3ème ligne : 1textField, 1bouton
Puis tout en dessous, à droite de préférence, un bouton qui exécute tout mon programme.
Je ne suis pas très doué avec les layouts. Je pensais créer par exemple, un JPanel qui comprend mes 3 lignes de JTextField avec leur bouton et tout ca avec un GridLayout(3,2). Puis l'autre bouton dans un autre JPanel.
J'ai réussi à positionner mes JTextField avec les boutons, mais seulement je ne sais pas comment ajouter le dernier bouton en dessous à droite...De plus j'aimerai que mes widgets ne prennent pas tout l'espace de ma fenêtre, et que mes boutons à droite de mes JTextField soient plus petits (des petits carrés).
Quelqu'un pourrait-il m'aider sur la façon de procéder?
A voir également:
- Positionner les widgets avec les layouts
- Widgets c'est quoi - Guide
- Widgets windows 11 - Guide
- Widgets iphone - Guide
- Positionner des points sur une carte - Guide
- Supprimer les widgets windows 10 - Guide
2 réponses
Bonjour,
Le mieux est de combiner les layouts entre eux, tu peux par exemple les imbriquer les uns dans les autres.
Donc tu peux avoir un GridLayout(3,2) pour ton formulaire que tu placeras par exemple à WEST dans un BorderLayout et ton autre bouton à SOUTH, ce qui te laissera tout le CENTER disponible pour le reste de ta fenêtre.
Le mieux est de combiner les layouts entre eux, tu peux par exemple les imbriquer les uns dans les autres.
Donc tu peux avoir un GridLayout(3,2) pour ton formulaire que tu placeras par exemple à WEST dans un BorderLayout et ton autre bouton à SOUTH, ce qui te laissera tout le CENTER disponible pour le reste de ta fenêtre.
Bonjour,
Voici un code avec GroupLayout. Pour rappel la documentation est disponible ici : How to Use GroupLayout

Pour commencer, un exemple pour avoir un bouton carré :
Et voici le code pour la fenêtre.
Voici un code avec GroupLayout. Pour rappel la documentation est disponible ici : How to Use GroupLayout

Pour commencer, un exemple pour avoir un bouton carré :
public class SquareIconButton extends JButton { public SquareIconButton(Icon icon) { setIcon(icon); } private Dimension squareSize(Dimension dim) { int size = Math.min(dim.width, dim.height); return new Dimension(size, size); } @Override public Dimension getMinimumSize() { return squareSize(super.getMinimumSize()); } @Override public Dimension getPreferredSize() { return squareSize(super.getPreferredSize()); } @Override public Dimension getSize() { return squareSize(super.getSize()); } @Override public Dimension getMaximumSize() { return squareSize(super.getMaximumSize()); } }
Et voici le code pour la fenêtre.
import javax.swing.*; public class MalfunctionIHM extends JFrame { public MalfunctionIHM() { JLabel labelOpenPdfFile = new JLabel("Chercher votre fichier pdf"); JButton buttonOpenPdfFile = new SquareIconButton(new ImageIcon("OpenPdfFile.png")); JLabel labelOpenTextFile = new JLabel("Chercher votre fichier txt"); JButton buttonOpenTextFile = new SquareIconButton(new ImageIcon("OpenTextFile.png")); JLabel labelSaveFile = new JLabel("Enregistrer sous"); JButton buttonSaveFile = new SquareIconButton(new ImageIcon("SaveFile.png")); JButton buttonExecute = new JButton("Executer"); GroupLayout layout = new GroupLayout(getContentPane()); layout.setAutoCreateGaps(true); layout.setAutoCreateContainerGaps(true); layout.setHorizontalGroup( layout.createSequentialGroup() .addGroup( layout.createParallelGroup(GroupLayout.Alignment.TRAILING) .addComponent(labelOpenPdfFile) .addComponent(labelOpenTextFile) .addComponent(labelSaveFile) ).addGroup( layout.createParallelGroup(GroupLayout.Alignment.CENTER) .addComponent(buttonOpenPdfFile) .addComponent(buttonOpenTextFile) .addComponent(buttonSaveFile) ) .addGap(30) .addComponent(buttonExecute) ); layout.setVerticalGroup( layout.createSequentialGroup() .addGroup( layout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(labelOpenPdfFile) .addComponent(buttonOpenPdfFile) ).addGroup( layout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(labelOpenTextFile) .addComponent(buttonOpenTextFile) ).addGroup( layout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(labelSaveFile) .addComponent(buttonSaveFile) ) .addGap(10) .addComponent(buttonExecute) ); setLayout(layout); setTitle("Malfunction"); setSize(340, 180); setLocationRelativeTo(null); setResizable(true); setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { new MalfunctionIHM(); } }
Ce qui donne :
Code :
De plus un certain nombre de composants, notamment les JPanel, n'ont aucun intérêt à être des attributs de la classe, il suffirait qu'ils soient en variables locales.
Quant à ton panAll, c'est tout simplement ta JFrame...
Pour le reste un petit dessin ce serait bien pour comprendre ce que tu veux.
Sachant qu'il y a des Layout beaucoup plus complets qui permettent de faire quasiment tout ce que l'on veut, mais ils sont aussi plus difficile à prendre en main. Exemple avec GroupLayout : https://docs.oracle.com/javase/tutorial/uiswing/layout/group.html