Département d’Informatique
LP-R2SI S6
Interface Graphique
Pr. Aimad QAZDAR
[Link]@[Link]
16 mars 2022
Introduction à SWING
● SWING est une bibliothèque de classes graphiques.
● Swing a été intégrée au JDK depuis sa version 1.2.
● Les classes SWING sont toutes basées sur les classes [Link] (AWT = Abstract
Window Toolkit), qui étaient les premières versions de composants graphiques
java. Bien qu’AWT ne soit pas obsolète, il vaut mieux construire une interface
utilisateur avec les composants SWING, bien mieux dotés en fonctionnalités.
● Elle est composée des packages suivant :
− [Link] : est le package principal; il contient les interfaces, les principaux
composants, les modèles par défaut
− [Link] : Classes représentant les bordures
− [Link] : Classes définissant un composant pour la sélection de
couleurs
− [Link] : Classes et interfaces pour les événements spécifiques à Swing.
Les autres événements sont ceux de AWT ([Link])
2
Introduction à SWING
− [Link] : Classes définissant un composant pour la sélection de
fichiers
− [Link] : Classes et interfaces génériques pour gérer l'apparence
− [Link] : Classes et interfaces de base pour gérer l'apparence
− [Link] : Classes et interfaces pour définir l'apparence Metal qui est
l'apparence par défaut
− [Link] : Classes définissant un composant pour la présentation de
données sous forme de tableau
3
La classe JFrame
● La classe de base d'une application graphique dans SWING est la classe JFrame.
● Elle possède deux constructeurs :
− JFrame() : constructeur par défaut
− JFrame(String) : constructeur paramétré avec le titre de l’application.
● Pour afficher la fenêtre il faut appeler la méthode setVisible()
● Pour modifier sa taille il faut appeler la méthode setSize() qui demande la largeur
et la hauteur de la fenêtre.
● Une interface utilisateur SWING est un assemblage de composants (components)
affichés dans une fenêtre ou un autre type de conteneur (container) suivant une
mise en page (layout).
4
La classe JFrame
● Exemple :
import [Link].*;
public class TestJFrame1 {
public static void main(String argv[]) {
JFrame f = new JFrame("ma fenetre");
[Link](300,100);
[Link](true);
}
}
5
Mise en page des composants
● Cette simple fenêtre d’authentification contient plusieurs composants :
JPasswordField
JTexteField
JLabel
6
Mise en page des composants
● L’ensemble de ces composants sont inclus dans une fenêtre JFrame, qui est une
fenêtre avec barre de titre et bords (‘Ma première fenêtre’).
● Dans cet exemple, les composants ont été disposés les uns derrière les autres, à
leur taille optimale (preferred).
● Pour se faire, on a utilisé un gestionnaire de mise en page (layout) spécifique
● ([Link]) et appliqué celui-ci au conteneur (container) de la fenêtre.
● Bien que les gestionnaires par défaut des fenêtres et boîtes de dialogues
conviennent quelquefois, il est souvent utile d’en changer en utilisant la méthode
setLayout
7
Mise en page des composants
● Code java de cet exemple :
import [Link].*;
import [Link].*;
public class PresentationComposants {
public static void main(String[] args)
{
// Création de la fenêtre ([Link]).
JFrame fenetre = new JFrame("Ma première fenêtre");
// Récupération du conteneur de la fenêtre ([Link]).
Container panneau = [Link]();
// Utilisation d'un gestionnaire de mise en page (layout) [Link]
// avec un écart de 5 pixels entre les composants alignés à la gauche.
// Affectation du layout au conteneur de la fenêtre (setLayout).
[Link](new FlowLayout([Link],5,5));
8
Mise en page des composants
● Suite de code :
// Ajout des 2 labels, d'un champ de saisie et d'un champ de mot de passe
// de 10 colonnes au conteneur.
[Link](new JLabel("Login :"));
[Link](new JTextField(10));
[Link](new JLabel("Mot de passe :"));
[Link](new JPasswordField(10));
// Calcul de la taille préférée de la fenêtre en fonction de son contenu.
[Link]();
// Changement de l'opération de fermeture en fonction de
//soncontenu.
[Link](JFrame.EXIT_ON_CLOSE);
// Affichage de la fenêtre.
[Link]();
}
}
9
● Par défaut, une fenêtre n’a pas de taille (seule la barre de titre apparaît). C’est
pour cela que l’on utilise la méthode pack, qui permet de calculer la taille préférée
(preferred) de la fenêtre avant de l’afficher. La taille préférée de la fenêtre dépend
des tailles préférées de ses composants.
● Par exemple, pour un JLabel, on obtient sa taille préférée par la méthode
getPreferredSize, qui retourne en pixels la taille de celui-ci, et qui dépend de la
longueur de son texte et de la police de caractère utilisée.
10
Mise en page des composants
11
Mise en page des composants
● Code de cet exemple :
import [Link].*;
import [Link].*;
public class PanneauPersonne extends JPanel {
private final static String[] TITRES = {"Mr", "Mme", "Melle" };
public PanneauPersonne()
{
// Création d'un panneau pour les labels de 4 lignes et 1 colonne
JPanel panneauLabels = new JPanel(new GridLayout(4,1,5,5));
[Link](new JLabel("Titre :"));
[Link](new JLabel("Nom :"));
[Link](new JLabel("Prénom :"));
[Link](new JLabel("Adresse :"));
12
Mise en page des composants
● Code de cet exemple (suite) :
// Création d'un panneau pour les composants de saisie de 4 lignes
// et 1 colonne
JPanel panneauSaisie = new JPanel( new GridLayout(4,1,5,5));
[Link](new JComboBox(TITRES));
[Link](new JTextField(10));
[Link](new JTextField(10));
// Utilisation sur le panneau courant du layout BorderLayout
// avec un écart de 5 pixels
setLayout(new BorderLayout(5,5));
add(panneauLabels,[Link]);
add(panneauSaisie,[Link]);
add(new JScrollPane(new JTextArea(4,20)), [Link]);
}
}
13
Mise en page des composants
● Code de cet exemple (suite) :
import [Link].*; // Changement de l'opération
import [Link].*; de fermeture en fonction de
public class ExempleEvolue { son contenu.
public static void main(String[] args) { [Link]
// Création de la fenêtre ([Link]). tion(JFrame.EXIT_ON_CLOSE);
JFrame fenetre = new JFrame("Saisie Personne");
// Affichage de la fenêtre.
// Récupération du conteneur de la fenêtre
([Link]).
[Link]();
Container panneau = [Link]();
[Link](new FlowLayout([Link],5, }
5)); }
// Création du panneau de saisie de la personne
PanneauPersonne lePanneauPersonne = new
PanneauPersonne();
[Link](lePanneauPersonne);
// Calcul de la taille préférée de la fenêtre en
fonction de son contenu.
[Link]();
14
Exercice
● Créer une nouvelle JFrame nommée "Découverte" et ajouter dans son ContentPane les
composants suivants :
− un bouton (JButton)
− un champ de texte (JTextField)
− une zone de texte (JTextArea)
● Ajouter une bulle d'aide contextuelle (setToolTipText()) sur le bouton ; rendre le bouton
inopérant (setEnabled()) ;
● Changer la couleur du texte et du fond du bouton ;
● Ajouter un texte dans le champ de texte et dans la zone de texte ;
● Rendre le champ de texte non éditable ;
● Ajouter une bordure au champ de texte (avec la méthode setBorder()) en fournissant un
objet de type [Link] créé via une méthode de la classe
[Link], par exemple la méthode createLineBorder(Color color, int
thickness) ;
● Modifier la forme que le curseur prend quand il passe au dessus de la zone de texte, pour
qu'il garde l'aspect d'une flèche.
15