swing
Utiliser Swing pour les interfaces utilisateur graphiques
Recherche…
Remarques
Quitter l'application sur la fenêtre close
Il est facile d'oublier de quitter l'application lorsque la fenêtre est fermée. N'oubliez pas d'ajouter la ligne suivante.
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //Quit the application when the JFrame is closed
Création d'une fenêtre vide (JFrame)
Créer le JFrame
Créer une fenêtre est facile. Il suffit de créer un JFrame
.
JFrame frame = new JFrame();
Titrer la fenêtre
Vous voudrez peut-être donner un titre à votre fenêtre. Vous pouvez le faire en passant une chaîne lors de la création de JFrame
ou en appelant frame.setTitle(String title)
.
JFrame frame = new JFrame("Super Awesome Window Title!");
//OR
frame.setTitle("Super Awesome Window Title!");
Définition de la taille de la fenêtre
La fenêtre sera aussi petite que possible lorsqu'elle aura été créée. Pour l'agrandir, vous pouvez définir explicitement sa taille:
frame.setSize(512, 256);
Ou vous pouvez avoir la taille du cadre elle-même en fonction de la taille de son contenu avec la méthode pack()
.
frame.pack();
Les méthodes setSize()
et pack()
s'excluent mutuellement, utilisez donc l'une ou l'autre.
Que faire sur Window Close
Notez que l'application ne se fermera pas lorsque la fenêtre aura été fermée. Vous pouvez quitter l'application après la fermeture de la fenêtre en indiquant à JFrame
de le faire.
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Alternativement, vous pouvez dire à la fenêtre de faire autre chose quand elle est fermée.
WindowConstants.DISPOSE_ON_CLOSE //Get rid of the window
WindowConstants.EXIT_ON_CLOSE //Quit the application
WindowConstants.DO_NOTHING_ON_CLOSE //Don't even close the window
WindowConstants.HIDE_ON_CLOSE //Hides the window - This is the default action
Création d'un volet de contenu
Une étape facultative consiste à créer un volet de contenu pour votre fenêtre. Ce n'est pas nécessaire, mais si vous le souhaitez, créez un JPanel
et appelez frame.setContentPane(Component component)
.
JPanel pane = new JPanel();
frame.setContentPane(pane);
Montrer la fenêtre
Après l'avoir créé, vous souhaiterez créer vos composants, puis afficher la fenêtre. Montrer la fenêtre est fait comme tel.
frame.setVisible(true);
Exemple
Pour ceux d'entre vous qui aiment copier et coller, voici un exemple de code.
JFrame frame = new JFrame("Super Awesome Window Title!"); //Create the JFrame and give it a title
frame.setSize(512, 256); //512 x 256px size
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //Quit the application when the JFrame is closed
JPanel pane = new JPanel(); //Create the content pane
frame.setContentPane(pane); //Set the content pane
frame.setVisible(true); //Show the window
Ajout de composants
Un composant est une sorte d'élément d'interface utilisateur, tel qu'un bouton ou un champ de texte.
Créer un composant
La création de composants est presque identique à la création d'une fenêtre. Au lieu de créer un JFrame
, vous créez ce composant. Par exemple, pour créer un JButton
, procédez comme suit.
JButton button = new JButton();
De nombreux composants peuvent recevoir des paramètres lors de leur création. Par exemple, un bouton peut être doté d'un texte à afficher.
JButton button = new JButton("Super Amazing Button!");
Si vous ne souhaitez pas créer de bouton, vous trouverez une liste de composants communs dans un autre exemple de cette page.
Les paramètres qui peuvent leur être transmis varient d'un composant à l'autre. Un bon moyen de vérifier ce qu'ils peuvent accepter est de regarder les paramètres de votre IDE (si vous en utilisez un). Les raccourcis par défaut sont répertoriés ci-dessous.
- IntelliJ IDEA - Windows / Linux:
CTRL + P
- IntelliJ IDEA - OS X / macOS:
CMD + P
- Eclipse:
CTRL + SHIFT + Space
- NetBeans:
CTRL + P
Affichage du composant
Une fois qu'un composant a été créé, vous définissez généralement ses paramètres. Après cela, vous devez le placer quelque part, par exemple sur votre JFrame
ou sur votre volet de contenu si vous en avez créé un.
frame.add(button); //Add to your JFrame
//OR
pane.add(button); //Add to your content pane
//OR
myComponent.add(button); //Add to whatever
Exemple
Voici un exemple de création d'une fenêtre, de définition d'un volet de contenu et d'ajout d'un bouton.
JFrame frame = new JFrame("Super Awesome Window Title!"); //Create the JFrame and give it a title
frame.setSize(512, 256); //512 x 256px size
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //Quit the application when the JFrame is closed
JPanel pane = new JPanel(); //Create the content pane
frame.setContentPane(pane); //Set the content pane
JButton button = new JButton("Super Amazing Button!"); //Create the button
pane.add(button); //Add the button to the content pane
frame.setVisible(true); //Show the window
Définition des paramètres pour les composants
Les composants ont différents paramètres pouvant être définis pour eux. Ils varient d'un composant à l'autre. Par conséquent, un bon moyen de définir les paramètres des composants est de commencer à saisir componentName.set
et de laisser les méthodes de saisie semi-automatique (si vous utilisez un IDE) de votre IDE suggérer. Le raccourci par défaut dans de nombreux IDE, s'il ne s'affiche pas automatiquement, est CTRL + Space
.
Paramètres communs partagés entre tous les composants
La description | Méthode |
---|---|
Définit la plus petite taille possible du composant (uniquement si le gestionnaire de disposition respecte la propriété minimumSize) | setMinimumSize(Dimension minimumSize) |
Définit la taille maximale du composant (uniquement si le gestionnaire de disposition respecte la propriété maximumSize) | setMaximumSize(Dimension maximumSize) |
Définit la taille préférée du composant (uniquement si le gestionnaire de disposition respecte la propriété preferredSize) | setPreferredSize(Dimension preferredSize) |
Affiche ou masque le composant | setVisible(boolean aFlag) |
Définit si le composant doit répondre à une entrée utilisateur | setEnabled(boolean enabled) |
Définit la police de texte | setFont(Font font) |
Définit le texte de l'info-bulle | setToolTipText(String text) |
Définit la couleur d'arrière-plan du composant | setBackground(Color bg) |
Définit la couleur de premier plan (couleur de police) du composant | setForeground(Color bg) |
Paramètres communs dans d'autres composants
Composants communs | La description | Méthode |
---|---|---|
JLabel , JButton , JCheckBox , JRadioButton , JToggleButton , JMenu , JMenuItem , JTextArea , JTextField | Définit le texte affiché | setText(String text) |
JProgressBar , JScrollBar , JSlider , JSpinner | Définir une valeur numérique entre les valeurs min et max du composant | setValue(int n) |
JProgressBar , JScrollBar , JSlider , JSpinner | Définit la plus petite valeur possible pour la propriété value | setMinimum(int n) |
JProgressBar , JScrollBar , JSlider , JSpinner | Set est la plus grande valeur possible que la propriété value puisse être | setMaxmimum(int n) |
JCheckBox , JToggleBox | Définir si la valeur est vraie ou fausse (par ex.: Une case à cocher doit-elle être cochée?) | setSelected(boolean b) |
Composants communs
La description | Classe |
---|---|
Bouton | JButton |
Case à cocher | JCheckBox |
Menu déroulant / Zone de liste déroulante | JComboBox |
Étiquette | JLabel |
liste | JList |
Barre de menu | JMenuBar |
Menu dans une barre de menu | JMenu |
Article dans un menu | JMenuItem |
Panneau | JPanel |
Barre de progression | JProgressBar |
Bouton radio | JRadioButton |
Barre de défilement | JScrollBar |
Curseur | JSlider |
Spinner / Number picker | JSpinner |
Table | JTable |
Arbre | JTree |
Zone de texte / zone de texte multiligne | JTextArea |
Champ de texte | JTextField |
Barre d'outils | JToolBar |
Création d'interfaces utilisateur interactives
Avoir un bouton là-bas est bien, mais à quoi ça sert si cliquer ne fait rien? ActionListener
s sont utilisés pour indiquer à votre bouton ou à un autre composant de faire quelque chose lorsqu'il est activé.
L'ajout d' ActionListener
s se fait comme tel.
buttonA.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//Code goes here...
System.out.println("You clicked the button!");
}
});
Ou, si vous utilisez Java 8 ou supérieur ...
buttonA.addActionListener(e -> {
//Code
System.out.println("You clicked the button!");
});
Exemple (Java 8 et supérieur)
JFrame frame = new JFrame("Super Awesome Window Title!"); //Create the JFrame and give it a title
frame.setSize(512, 256); //512 x 256px size
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //Quit the application when the JFrame is closed
JPanel pane = new JPanel(); //Create a pane to house all content
frame.setContentPane(pane);
JButton button = new JButton("Click me - I know you want to.");
button.addActionListener(e -> {
//Code goes here
System.out.println("You clicked me! Ouch.");
});
pane.add(buttonA);
frame.setVisible(true); //Show the window
Organisation des composants
L'ajout de composants les uns après les autres entraîne une interface utilisateur difficile à utiliser, car les composants sont tous quelque part . Les composants sont classés de haut en bas, chaque composant dans une "rangée" distincte.
Pour remédier à cela et vous fournir en tant que développeur une possibilité de mettre en page facilement des composants, Swing a LayoutManager
.
Ces LayoutManagers sont abordés plus en détail dans Introduction aux gestionnaires de mise en page ainsi que dans les rubriques distinctes de Layout Manager: