L’interface graphique : Java swing
1. Introduction à Java Swing
Qu’est-ce que Java Swing ?
Swing est une bibliothèque graphique de Java qui permet de créer des interfaces graphiques
(GUI). Elle fait partie du Java Foundation Classes (JFC).
Swing repose sur AWT (Abstract Window Toolkit), mais est plus puissante et flexible.
Elle est "lightweight", donc indépendante du système d'exploitation.
Principaux composants Swing :
Composant Description
JFrame La fenêtre principale
JPanel Un conteneur pour organiser d’autres composants
JLabel Affiche un texte
JButton Bouton cliquable
JTextField Champ de texte
JTextArea Zone de texte multiline
JCheckBox Case à cocher
JRadioButton Bouton radio
JComboBox Liste déroulante
JTable Tableau de données
Premier exemple : Fenêtre avec un label
package com.java.swing;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class HelloSwing {
public static void main(String[] args) {
// Créer la fenêtre
JFrame frame = new JFrame("Ma première fenêtre");
frame.setSize(300, 200); // taille : largeur x hauteur
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Ajouter un label
JLabel label = new JLabel("Bonjour le monde !");
frame.add(label);
// Afficher la fenêtre
frame.setVisible(true);
}
}
On aura le résultat suivant :
Mme BENSIDI AHMED 1
L’interface graphique : Java swing
Explication :
JFrame est la fenêtre principale.
setDefaultCloseOperation permet de fermer le programme en cliquant sur la croix.
add(label) ajoute le composant au centre de la fenêtre.
setVisible(true) rend la fenêtre visible.
Exercice pratique 1 :
Crée une application qui :
Affiche une fenêtre 400x300
Contient un JLabel avec ton nom
Change le titre de la fenêtre
2. Boutons et Champs de texte
Exemple : Affichage d’un message saisi
package com.java.swing;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class HelloSwing {
public static void main(String[] args) {
JFrame frame = new JFrame("Saisie utilisateur");
frame.setSize(400, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Layout vertical
frame.setLayout(new GridLayout(3, 1));
// Champ de texte
Mme BENSIDI AHMED 2
L’interface graphique : Java swing
JTextField champNom = new JTextField();
// Label vide
JLabel labelMessage = new JLabel("", SwingConstants.CENTER);
// Bouton
JButton boutonValider = new JButton("Afficher le nom");
// Action quand on clique sur le bouton
boutonValider.addActionListener(e -> {
String nom = champNom.getText();
labelMessage.setText("Bonjour " + nom + " !");
});
// Ajout des composants
frame.add(champNom);
frame.add(boutonValider);
frame.add(labelMessage);
frame.setVisible(true);
}
}
Le résultat est le suivant :
Exercice pratique 2 :
Crée une interface qui :
Affiche un champ de saisie pour un âge
Affiche un message différent si la personne a moins de 18 ans ou plus
3. Layouts (Dispositions)
Pourquoi utiliser des layouts ?
Sans layout, tous les composants se superposent. Les layouts permettent d’organiser les
composants dans la fenêtre.
Layouts les plus courants :
Mme BENSIDI AHMED 3
L’interface graphique : Java swing
Layout Description
FlowLayout Aligne les composants à la suite (par défaut)
Divise la fenêtre en 5 zones (NORTH, SOUTH, EAST, WEST,
BorderLayout
CENTER)
GridLayout Grille avec lignes et colonnes
BoxLayout Empile verticalement ou horizontalement
Exemple : BorderLayout
package com.java.swing;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class HelloSwing {
public static void main(String[] args) {
JFrame frame = new JFrame("BorderLayout");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new JButton("Nord"), BorderLayout.NORTH);
frame.add(new JButton("Sud"), BorderLayout.SOUTH);
frame.add(new JButton("Est"), BorderLayout.EAST);
frame.add(new JButton("Ouest"), BorderLayout.WEST);
frame.add(new JButton("Centre"), BorderLayout.CENTER);
frame.setVisible(true);
}
}
Le résultat est :
Exemple : GridLayout
Mme BENSIDI AHMED 4
L’interface graphique : Java swing
package com.java.swing;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class HelloSwing {
public static void main(String[] args) {
JFrame frame = new JFrame("GridLayout");
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(2, 2)); // 2 lignes, 2 colonnes
frame.add(new JButton("1"));
frame.add(new JButton("2"));
frame.add(new JButton("3"));
frame.add(new JButton("4"));
frame.setVisible(true);
}
}
On aura :
Exercice pratique 3 :
Crée une interface avec :
2 champs de texte (nom, prénom)
1 bouton "Afficher"
1 JLabel en dessous pour afficher "Bonjour Nom Prénom !"
Utilise un GridLayout 3x1 pour organiser ça verticalement
4. Gestion des événements avancés
Mme BENSIDI AHMED 5
L’interface graphique : Java swing
Les événements Swing les plus utilisés
Listener Utilisé pour...
ActionListener Boutons, menus
ItemListener Cases à cocher, listes déroulantes
KeyListener Clavier
MouseListener Clics souris
ChangeListener Curseurs, barres de progression
Exemple : ActionListener sur plusieurs boutons
package com.java.swing;
import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class HelloSwing {
public static void main(String[] args) {
JFrame frame = new JFrame("Choix de couleur");
frame.setSize(300, 150);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
JLabel label = new JLabel("Choisissez une couleur");
JButton rouge = new JButton("Rouge");
JButton bleu = new JButton("Bleu");
rouge.addActionListener(e -> label.setForeground(Color.RED));
bleu.addActionListener(e -> label.setForeground(Color.BLUE));
frame.add(label);
frame.add(rouge);
frame.add(bleu);
frame.setVisible(true);
}
}
On aura :
Mme BENSIDI AHMED 6
L’interface graphique : Java swing
Exemple : ItemListener pour une JCheckBox
package com.java.swing;
import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class HelloSwing {
public static void main(String[] args) {
JFrame frame = new JFrame("CheckBox");
frame.setSize(300, 100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JCheckBox caseBox = new JCheckBox("Afficher message");
JLabel label = new JLabel("");
caseBox.addItemListener(e -> {
if (e.getStateChange() == ItemEvent.SELECTED) {
label.setText("Case cochée !");
} else {
label.setText("");
}
});
frame.setLayout(new FlowLayout());
frame.add(caseBox);
frame.add(label);
frame.setVisible(true);
}
}
On aura comme résultat
Mme BENSIDI AHMED 7
L’interface graphique : Java swing
Exercice pratique 4 :
Crée une interface avec :
Une JComboBox contenant 3 pays (ex : Algérie, France, Canada)
Un JLabel qui affiche "Vous avez choisi : [Pays]"
5. Dialogues et menus
Les dialogues avec JOptionPane
Méthode Utilité
showMessageDialog Affiche un message
showConfirmDialog Oui / Non / Annuler
showInputDialog Saisie de texte
showOptionDialog Choix personnalisé
Exemple : Message simple
package com.java.swing;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class HelloSwing {
public static void main(String[] args) {
// Créer la fenêtre principale
JFrame frame = new JFrame("Exemple JOptionPane");
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null); // Utilisation du positionnement absolu
// Créer un bouton
JButton button = new JButton("Afficher message");
button.setBounds(70, 60, 150, 30);
// Ajouter un écouteur d'événement
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Afficher la boîte de message
JOptionPane.showMessageDialog(null, "Opération réussie !");
}
});
// Ajouter le bouton à la fenêtre
frame.add(button);
// Rendre la fenêtre visible
Mme BENSIDI AHMED 8
L’interface graphique : Java swing
frame.setVisible(true);
}
}
Le résultat sera :
Exemple : Confirmation
package com.java.swing;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class HelloSwing {
public static void main(String[] args) {
// Créer la fenêtre principale
JFrame frame = new JFrame("Exemple ConfirmDialog");
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
// Créer un bouton "Quitter"
JButton quitterButton = new JButton("Quitter");
quitterButton.setBounds(100, 70, 100, 30);
// Ajouter l'action au clic
quitterButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int choix = JOptionPane.showConfirmDialog(
null,
"Voulez-vous quitter ?",
Mme BENSIDI AHMED 9
L’interface graphique : Java swing
"Confirmation",
JOptionPane.YES_NO_OPTION
);
if (choix == JOptionPane.YES_OPTION) {
System.exit(0);
}
}
});
// Ajouter le bouton à la fenêtre
frame.add(quitterButton);
// Afficher la fenêtre
frame.setVisible(true);
}
}
On aura :
Menus avec JMenuBar
package com.java.swing;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
public class HelloSwing {
public static void main(String[] args) {
JFrame frame = new JFrame("Menu exemple");
frame.setSize(400, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Mme BENSIDI AHMED 10
L’interface graphique : Java swing
// Barre de menu
JMenuBar menuBar = new JMenuBar();
// Menu principal
JMenu menuFichier = new JMenu("Fichier");
// Éléments du menu
JMenuItem itemNouveau = new JMenuItem("Nouveau");
JMenuItem itemQuitter = new JMenuItem("Quitter");
// Action sur "Quitter"
itemQuitter.addActionListener(e -> {
int confirm = JOptionPane.showConfirmDialog(frame, "Quitter l'application ?");
if (confirm == JOptionPane.YES_OPTION) {
frame.dispose();
}
});
// Construction du menu
menuFichier.add(itemNouveau);
menuFichier.add(itemQuitter);
menuBar.add(menuFichier);
// Ajout à la fenêtre
frame.setJMenuBar(menuBar);
frame.setVisible(true);
}
}
On aura :
Exercice pratique 5 :
Crée une fenêtre avec :
Un bouton "Aide"
Lorsqu'on clique, une boîte de dialogue (JOptionPane) s’affiche avec une phrase
d’aide
6. Tableaux (JTable) et gestion des données
Mme BENSIDI AHMED 11
L’interface graphique : Java swing
Qu’est-ce que JTable ?
JTable permet d’afficher des données en colonnes et lignes, comme un petit tableau Excel.
Exemple simple avec JTable
package com.java.swing;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class HelloSwing {
public static void main(String[] args) {
JFrame frame = new JFrame("Exemple de JTable");
frame.setSize(400, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// En-têtes
String[] colonnes = {"Nom", "Prénom", "Âge"};
// Données
Object[][] donnees = {
{"Youssef", "Ali", 24},
{"Sarah", "Ben", 30},
{"Nour", "Ahmed", 21}
};
// Création de la JTable
JTable table = new JTable(donnees, colonnes);
// Ajouter dans un JScrollPane pour le scroll
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane);
frame.setVisible(true);
}
}
On aura :
Astuce : Le JScrollPane permet de scroller si le tableau devient trop grand.
Mme BENSIDI AHMED 12
L’interface graphique : Java swing
Exemple avec ajout dynamique (modèle)
Pour des actions dynamiques (ajouter/supprimer), on utilise le DefaultTableModel.
package com.java.swing;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
public class HelloSwing {
public static void main(String[] args) {
// Créer la fenêtre
JFrame frame = new JFrame("JTable avec DefaultTableModel");
frame.setSize(500, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
// Définir les colonnes
String[] columnNames = {"ID", "Nom", "Filière"};
// Créer le modèle de table
DefaultTableModel model = new DefaultTableModel(columnNames, 0);
// Ajouter quelques lignes au modèle
model.addRow(new Object[]{"1", "Alice", "Informatique"});
model.addRow(new Object[]{"2", "Bob", "Mathématiques"});
// Créer la JTable à partir du modèle
JTable table = new JTable(model);
// Mettre la table dans un JScrollPane
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setBounds(20, 20, 450, 150);
// Champ de saisie pour ajouter une nouvelle ligne
JTextField idField = new JTextField();
idField.setBounds(20, 180, 50, 25);
JTextField nomField = new JTextField();
nomField.setBounds(80, 180, 150, 25);
Mme BENSIDI AHMED 13
L’interface graphique : Java swing
JTextField filiereField = new JTextField();
filiereField.setBounds(240, 180, 150, 25);
JButton addButton = new JButton("Ajouter");
addButton.setBounds(400, 180, 80, 25);
// Action du bouton "Ajouter"
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String id = idField.getText();
String nom = nomField.getText();
String filiere = filiereField.getText();
if (!id.isEmpty() && !nom.isEmpty() && !filiere.isEmpty()) {
model.addRow(new Object[]{id, nom, filiere});
idField.setText("");
nomField.setText("");
filiereField.setText("");
} else {
JOptionPane.showMessageDialog(frame, "Veuillez remplir tous les champs.");
}
}
});
// Ajouter les composants à la fenêtre
frame.add(scrollPane);
frame.add(idField);
frame.add(nomField);
frame.add(filiereField);
frame.add(addButton);
// Afficher la fenêtre
frame.setVisible(true);
}
}
On aura :
Exercice pratique 6 :
Mme BENSIDI AHMED 14
L’interface graphique : Java swing
Crée une fenêtre avec une JTable qui affiche une liste de livres :
Colonnes : Titre, Auteur, Année
3 lignes de livres en données
7. Projet complet — Mini gestion de contacts
Objectif :
Construire une application complète Swing qui permet de :
Ajouter des contacts (nom, téléphone, email)
Afficher les contacts dans une JTable
Réinitialiser les champs
Structure du projet
JTextField pour les entrées
JButton pour ajouter et réinitialiser
JTable avec DefaultTableModel pour les données
Exercice final :
Crée cette interface en Swing avec :
Trois JTextField (nom, téléphone, email)
Un bouton "Ajouter" qui insère une ligne dans la table
Un bouton "Réinitialiser" qui vide les champs
Mme BENSIDI AHMED 15