Positionner les widgets avec les layouts
Résolu/Fermé
A voir également:
- Positionner les widgets avec les layouts
- Widgets c'est quoi - Guide
- Widgets windows 11 - Guide
- Positionner des points sur une carte - Guide
- Supprimer les widgets windows 11 - Guide
- Les widgets sont désactivés en mode sécurisé - Guide
2 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
5 juil. 2017 à 18:08
5 juil. 2017 à 18:08
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.
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
7 juil. 2017 à 22:21
7 juil. 2017 à 22:21
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(); } }
5 juil. 2017 à 19:29
5 juil. 2017 à 19:42
Ce qui donne :
6 juil. 2017 à 10:42
6 juil. 2017 à 11:04
Code :
6 juil. 2017 à 11:15
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