0% ont trouvé ce document utile (0 vote)
52 vues77 pages

Programmation d'Interface Graphique Java

Transféré par

Laila Raouane
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
52 vues77 pages

Programmation d'Interface Graphique Java

Transféré par

Laila Raouane
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

5/9/2024

Programmation d'interface graphique

AWT & Swing

BD
Programme

Interface Utilisateur

Rôles d’une interface utilisateur:


 montrer le résultat de l’exécution
 permettre à l’utilisateur d’interagir
 (1) Montrer – (2) Réagir
2

1
5/9/2024

Composants graphiques lourds: AWT


 AWT (Abstract Window Toolkit).
 Les composants AWT sont situés dans le package java.awt du
Module java.desktop
 Un composant graphique lourd (HeavyWeight GUI component)
s'appuie sur le gestionnaire de fenêtres local, celui de la machine sur
laquelle le programme s'exécute.
 AWT ne comporte que des composants lourds.
 Ce choix technique a été initialement fait pour assurer la portabilité.
 https://docs.oracle.com/en/java/javase/15/docs/api/java.desktop/java/awt/package-summary.html

Composants légers de Swing


 API Swing
 Un composant graphique léger (en anglais, LightWeight GUI
component) est un composant graphique indépendant du
gestionnaire de fenêtre local.
 Un composant léger ressemble à un composant du gestionnaire de
fenêtre local mais n'en est pas un : un composant léger émule les
composants de gestionnaire de fenêtre local.
 Un bouton léger est un rectangle dessiné sur une zone de dessin qui
contient une étiquette et réagit aux événements souris.
 Tous les composants de Swing, exceptés JApplet, JDialog, JFrame
et JWindow sont des composants légers.

2
5/9/2024

Convention de nommage
 Les composants Swing sont situés dans le package javax.swing et
ses sous-packages du Module java.desktop
 Ils portent des noms similaires à leurs correspondants de AWT
précédés d'un J:
 JFrame, JPanel, JTextField, JButton, JCheckBox, JLabel, etc.

Composition d’une interface graphique


6

 Une fenêtre peut donc être construite selon le principe suivant :

3
5/9/2024

Le conteneur (Container)
7

 En plus des caractéristiques d’un composant simple, un container


contient un ensemble de composants ainsi que des contraintes sur
leur disposition.
 L’ajout d’un composant à un container se fait par une méthode add().
 Il existe plusieurs méthodes add() acceptant des paramètres d’entrée
différents.
 La méthode à utiliser dépend du type de disposition choisi.

Les composants graphiques de Swing


Composer une fenêtre
Voici les étapes à suivre:
 Créer une fenêtre (1)
 Créer un ou des composants intermédiaires (2)
 Pour JFrame, un JPanel est associé implicitement (ContentPane)
 Créer des composants de base (3)
 Insérer (3) dans (2)
 Insérer (2) dans (1) (s’ils ne sont pas déjà associés)
 Afficher
 Gérer les évènements

4
5/9/2024

Les contrôles usuels

10

5
5/9/2024

11

12

6
5/9/2024

Les composants graphiques de Swing


Composants intermédiaires
 Utilisés pour organiser ou positionner d’autres composants (de
base)
 JPanel utilisé pour regrouper d’autres composants
 JScrollPane fournir une vue avec scroll bars
 JSplitPane divise en 2 composants
 …

JPanel p = new JPanel();


p.add(new JButton("on"));
p.add(new JButton("off"));
13

La classe JFrame

14

7
5/9/2024

La classe JFrame
Fenetre.java
import javax.swing.JFrame;
public class Fenetre extends JFrame { PremiereFenetre.java
public Fenetre(){ public class PremiereFenetre {
this.setTitle("My first window"); public static void main(String[] args){
this.setSize(600, 600); JFrame f = new Fenetre();
this.setLocationRelativeTo(null); }
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
this.setVisible(true);
}
}

15

La classe JFrame
Fenetre.java PremiereFenetre.java
import javax.swing.JFrame; public class PremiereFenetre {
public class Fenetre extends JFrame { public static void main(String[] args){
public Fenetre(){ JFrame f = new Fenetre();
this.setTitle("My first window"); f.setVisible(true);
this.setSize(600, 600); }
this.setLocationRelativeTo(null); }
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

16

8
5/9/2024

La classe JFrame
Action sur les caractéristiques d’une fenêtre
Positionner la fenêtre à l'écran: setLocation()
La méthode setLocation(int x, int y) nous permet de positionner la fenêtre dans l’écran.
Les coordonnées, exprimées en pixels, sont basées sur un repère dont l'origine est
représentée par le coin supérieur gauche.
Exemple:
f.setLocation(10,40);
// le coin supérieur gauche de la fenêtre
// est placé au pixel de coordonnées 10, 40

17

Action sur les caractéristiques d’une fenêtre


Fixer les dimensions et positionner la fenêtre à l'écran
La méthode setBounds() nous permet de fixer non seulement les
dimensions, mais aussi la position de la fenêtre à l’écran.

Exemple:
f.setBounds (10, 40, 300, 200);
// le coin supérieur gauche de la fenêtre
// est placé au pixel de coordonnées 10, 40
// et ses dimensions seront de 300 * 200 pixels

18

9
5/9/2024

Action sur les caractéristiques d’une fenêtre


Empêcher le redimensionnement de la fenêtre
Pour cela, il suffit d'invoquer la méthode setResizable(boolean b) :
false empêche le redimensionnement tandis que true l'autorise.

Exemple:
f.setResizable(true);
f.setResizable(false);

19

Action sur les caractéristiques d’une fenêtre


Garder la fenêtre au premier plan
 Il s'agit là encore d'une méthode qui prend un booléen en
paramètre.
 Passer true laissera la fenêtre au premier plan quoi qu'il advienne,
false annulera cela.
 Cette méthode est setAlwaysOnTop(boolean b).

20

10
5/9/2024

Action sur les caractéristiques d’une fenêtre

Retirer les contours et les boutons de contrôle


Pour ce faire, il faut utiliser la méthode setUndecorated(boolean b).

21

Action sur les caractéristiques d’une fenêtre


Retirer les contours et les boutons de contrôle
Exemple
package projetTest;
import javax.swing.JFrame;
import javax.swing.JRootPane;
public class TestIHM1{
public static void main(final String args[]) {
JFrame frame = new JFrame("Exemple d'ornement");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.setUndecorated(true);
frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
frame.setSize(300, 100);
frame.setVisible(true);
}
}

22

11
5/9/2024

Action sur les caractéristiques d’une fenêtre

Retirer les contours et les boutons de contrôle


Exemple
package projetTest;
import javax.swing.JFrame;
import javax.swing.JRootPane;
public class TestIHM1 {
public static void main(final String args[]) {
JFrame frame = new JFrame("Exemple d'ornement");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setUndecorated(true);
frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
frame.setSize(300, 100);
frame.setVisible(true);
}
}
23

La classe JPanel
L’objet JPanel
 Un panneau est une sorte de "sous-fenêtre", sans titre ni bordure.
Il s’agit donc d’un simple rectangle qui, tant qu’on ne lui donne
pas de couleur spécifique n’est guère visible.
 Contrairement à une fenêtre, un panneau ne peut pas exister de
façon autonome.
 Il doit obligatoirement être associé par la méthode add() à un
autre conteneur, généralement une fenêtre (plus exactement à son
contenu).

24

12
5/9/2024

La classe JPanel

L’objet JPanel
 Nous allons utiliser un JPanel, composant de type conteneur dont la vocation est
d'accueillir d'autres objets de même type ou des objets de type composant
(boutons, cases à cocher…).
 Voici les étapes à suivre :
1. Importer la classe javax.swing.JPanel dans notre classe héritée de JFrame.
2. Instancier un JPanel puis lui spécifier une couleur de fond pour mieux le distinguer.
3. Avertir notre JFrame que ce sera notre JPanel qui constituera son ContentPane.

25

La classe JPanel
L’objet JPanel
Exemple 1
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Fenetre extends JFrame {
public Fenetre(){
this.setTitle("My first window");
this.setSize(600, 600);
this.setLocationRelativeTo(null);
//Instanciation d'un objet JPanel
JPanel pan = new JPanel();
//Définition de sa couleur de fond
pan.setBackground(Color.ORANGE);
//On prévient notre JFrame que notre JPanel sera son ContentPane
this.setContentPane(pan);
this.setVisible(true);
}
}
26

13
5/9/2024

JButton
La classe JButton
La classe JButton est dans le package javax.swing.

27

JButton
 Voici la deuxième possibilité pour définir le libellé (ou l’étiquette)
du bouton:
JButton bouton2 = new JButton();
bouton2.setText("Bouton2");

28

14
5/9/2024

JButton
Exemple 1
Fenetre.java
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Fenetre extends JFrame{
private JPanel pan = new JPanel();
private JButton bouton = new JButton("Bouton");
public Fenetre(){
this.setTitle("ma fenêtre");
this.setSize(300, 150);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
//Ajout du bouton à notre ContentPane
pan.add(bouton);
this.setContentPane(pan);
this.setVisible(true);
}
} 29

JButton
Exemple 2
Fenetre.java
import javax.swing.JButton;
import javax.swing.JFrame;
public class Fenetre extends JFrame{
private JButton bouton = new JButton("Bouton");
public Fenetre(){
this.setTitle("ma fenetre");
this.setSize(300, 150);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
//On ajoute le bouton au content pane de la JFrame
this.getContentPane().add(bouton);
this.setVisible(true);
}
}

30

15
5/9/2024

JButton
Exemple 3
import javax.swing.* ; import java.awt.* ; import java.awt.event.* ;
class FenBouton extends JFrame{
public FenBouton(){
setTitle("Premier bouton");
setSize(300, 200);
monBouton = new JButton("ESSAI");
setLayout(new FlowLayout()) ;
getContentPane().add(monBouton) ;
}
private JButton monBouton ;
}
public class TestBouton{
public static void main (String args[]){
FenBouton fen = new FenBouton() ;
fen.setVisible(true) ;
}
}

31

JButton
Exemple 4:
import javax.swing.* ; import java.awt.* ; import java.awt.event.* ;
class FenBouton extends JFrame{
public FenBouton(){
setTitle("Premier bouton");
setSize(300, 200);
monBouton = new JButton("ESSAI") ;
getContentPane().setLayout(new FlowLayout()) ;
getContentPane().add(monBouton) ;
}
private JButton monBouton ;
}
public class TestBouton{
public static void main (String args[]){
FenBouton fen = new FenBouton() ;
fen.setVisible(true) ;
}
}

32

16
5/9/2024

JButton
Gestion du bouton avec un écouteur
 Il suffit simplement de savoir que l’événement qui nous intéresse est l’unique événement
d’une catégorie d’événements nommée Action. Il faudra donc :
 créer un écouteur qui sera un objet d’une classe qui implémente l’interface ActionListener;
cette dernière ne comporte qu’une méthode nommée actionPerformed();
 associer cet écouteur au bouton par la méthode addActionListener() (présente dans tous les
composants qui en ont besoin, donc en particulier dans la classe JButton).

33

Gestion du bouton avec un écouteur


Exemple:
import javax.swing.* ;
import java.awt.* ;
import java.awt.event.* ;
class FenBouton extends JFrame implements ActionListener{ // Attention : ne pas oublier implements
public FenBouton(){
setTitle("Premier bouton");
setSize(300, 200);
monBouton = new JButton("ESSAI") ;
getContentPane().setLayout(new FlowLayout()) ;
getContentPane().add(monBouton) ;
monBouton.addActionListener(this);}
public void actionPerformed(ActionEvent ev){
System.out.println("action sur bouton ESSAI");}
private JButton monBouton ;
}
public class TestBouton{
public static void main (String args[]){
FenBouton fen = new FenBouton() ;
fen.setVisible(true);}
}

34

17
5/9/2024

Gestion de plusieurs composants


Tous les boutons déclenchent la même réponse
import javax.swing.*; import java.awt.*; import java.awt.event.* ;
class Fen2Boutons extends JFrame implements ActionListener{
public Fen2Boutons (){
setTitle("Avec deux boutons") ;
setSize(300, 200) ;
monBouton1 = new JButton ("Bouton A") ;
monBouton2 = new JButton ("Bouton B") ;
Container contenu = getContentPane();
contenu.setLayout(new FlowLayout());
contenu.add(monBouton1); contenu.add(monBouton2);
monBouton1.addActionListener(this); // la fenetre ecoute monBouton1
monBouton2.addActionListener(this); // la fenetre ecoute monBouton2
}
public void actionPerformed (ActionEvent ev) { //gestion commune a tous les boutons
System.out.println("action sur un bouton") ; }
private JButton monBouton1, monBouton2 ;
}
public class TestBouton{
public static void main (String args[]){
Fen2Boutons fen = new Fen2Boutons() ;
fen.setVisible(true);}} 35

Gestion de plusieurs composants

La méthode getSource()
Nous faisons appel à la méthode getSource() (présente dans toutes les classes
événements, donc dans ActionEvent); elle fournit une référence (de type Object)
sur l’objet ayant déclenché l’événement concerné.

36

18
5/9/2024

La méthode getSource()

Exemple
import javax.swing.*; import java.awt.* ;
import java.awt.event.*;
class Fen2Boutons extends JFrame implements ActionListener{
public Fen2Boutons (){
setTitle("Avec deux boutons"); setSize(300, 200) ;
monBouton1 = new JButton ("Bouton A") ;
monBouton2 = new JButton ("Bouton B") ;
Container contenu = getContentPane() ;
contenu.setLayout(new FlowLayout()) ;
contenu.add(monBouton1); contenu.add(monBouton2) ;
monBouton1.addActionListener(this); monBouton2.addActionListener(this);
}
public void actionPerformed (ActionEvent ev){
if (ev.getSource() == monBouton1) System.out.println("action sur bouton numero 1") ;
if (ev.getSource() == monBouton2) System.out.println("action sur bouton numero 2") ;
}
private JButton monBouton1, monBouton2 ;}
public class TestJBouton{
public static void main(String args[]){
Fen2Boutons fen = new Fen2Boutons();
fen.setVisible(true);} }
37

Gestion de plusieurs composants


La méthode getActionCommand()
 La méthode getSource() permet d’identifier la source d’un événement et elle a le
mérite de s’appliquer à tous les événements générés par tous les composants.
 Il existe une autre technique d’identification d’une source d’événements qui ne
s’applique qu’aux événements de la catégorie Action. Elle se fonde sur le fait
que tout événement de cette catégorie est caractérisé par ce que l’on nomme une
chaîne de commande, i.e. une chaîne de caractères (String) associée à l’action.
Par défaut, dans le cas d’un bouton, la chaîne de commande n’est rien d’autre
que l’étiquette de ce bouton.
 La méthode getActionCommand(), présente uniquement dans la classe
ActionEvent, permet d’obtenir la chaîne de commande associée à la source d’un
événement.

38

19
5/9/2024

La méthode getActionCommand()
Exemple:
import javax.swing.* ; import java.awt.* ; import java.awt.event.* ;
class Fen2Boutons extends JFrame implements ActionListener{
public Fen2Boutons(){
setTitle("Avec deux boutons") ; setSize(300, 200) ;
monBouton1 = new JButton("Bouton A") ; monBouton2 = new JButton("Bouton B") ;
Container contenu = getContentPane();
contenu.setLayout(new FlowLayout());
contenu.add(monBouton1); contenu.add(monBouton2);
monBouton1.addActionListener(this);
monBouton2.addActionListener(this);
}
public void actionPerformed(ActionEvent ev){
String nom = ev.getActionCommand();
System.out.println ("Action sur bouton " + nom) ;
}
private JButton monBouton1, monBouton2 ;
}
public class TestBouton{
public static void main (String args[]){
Fen2Boutons fen = new Fen2Boutons() ;
fen.setVisible(true) ;} }
39

JCheckBox

Les cases à cocher


 La case à cocher permet à l’utilisateur d’effectuer des choix.
 L'utilisateur peut cocher/décocher une case en cliquant dessus, ou avec la touche
espace.
 La case à cocher est instanciée par un constructeur de la classe JCheckBox.
 Par défaut, une case à cocher est construite dans l’état non coché.
 On peut lui imposer l’état coché en utilisant une autre version de constructeur:
JCheckBox coche = new JCheckBox("Case", true) ;
 Notez que l’appel JCheckBox("Case") est équivalent à l’appel
JCheckBox("Case", false).

20
5/9/2024

JCheckBox Exemple 1:

JCheckBox

État d’une case à cocher


 On peut connaître l’état d’une case à un moment donné, indépendamment de son
éventuel changement d’état.
 Il suffit pour cela de faire appel à la méthode isSelected() de la classe
JCheckBox :
if (case.isSelected()) .....

 Enfin, indépendamment de l’action de l’utilisateur, on peut, à tout instant,


imposer à une case un état donné en recourant à la méthode setSelected:
case.setSelected(true) ; // coche la case de référence case, quel que
// soit son état actuel

21
5/9/2024

JCheckBox

Réaction à l’action sur une case à cocher


 Chaque action de l’utilisateur sur une case à cocher génère à la fois:
 un événement Action
 un événement Item
 Pour réagir immédiatement à un changement d’état d’une case à cocher, on lui associera
donc un écouteur approprié, c’est-à-dire de la catégorie Action ou de la catégorie Item.
 Un écouteur de la catégorie Action doit implémenter l’interface ActionListener
 Un écouteur de la catégorie Item doit implémenter l’interface ItemListener; celle-ci ne
comporte qu’une seule méthode d’en-tête:
public void itemStateChanged(ItemEvent ev)

Réaction à l’action sur une case à cocher


44

Remarque:
 En général aucun intérêt à traiter le même événement à la fois
dans actionPerformed() et dans itemStateChanged().
 Simplement, on pourra profiter de cette redondance pour choisir
le type d’écouteur le plus approprié à son problème.

22
5/9/2024

JCheckBox

Exemple 2:
import java.awt.* ; import java.awt.event.* ; import javax.swing.* ;
class FenCoches extends JFrame implements ActionListener{
public FenetreCoches(){
setTitle("Exemple de cases à cocher") ;
setSize(400, 100) ;
Container contenu = getContentPane() ;
contenu.setLayout (new FlowLayout()) ;
coche1 = new JCheckBox ("case 1") ; contenu.add(coche1) ;
coche1.addActionListener(this) ;
coche2 = new JCheckBox("case 2") ; contenu.add(coche2) ;
coche2.addActionListener(this) ;
etat = new JButton("État") ; contenu.add(etat) ;
etat.addActionListener(this) ;}
public void actionPerformed (ActionEvent ev){
Object source = ev.getSource() ;
if (source == coche1) System.out.println ("action case 1") ;
if (source == coche2) System.out.println ("action case 2") ;
if (source == etat) System.out.println ("État CASES : " + coche1.isSelected() + " "+ coche2.isSelected()) ;}
private JCheckBox coche1, coche2 ; private JButton etat ;}
public class TestJCheckBox{
public static void main (String args[]){
FenetreCoches fen = new FenetreCoches() ; fen.setVisible(true) ;}
}

JCheckBox
Exemple 3:
import java.awt.* ; import java.awt.event.* ; import javax.swing.* ;
class FenCoches extends JFrame implements ActionListener, ItemListener{
public FenetreCoches(){
setTitle("Exemple de cases à cocher") ;
setSize(400, 100);
Container contenu = getContentPane() ;
contenu.setLayout (new FlowLayout()) ;
coche1 = new JCheckBox ("case 1") ; contenu.add(coche1) ;
coche1.addItemListener (this) ;
coche2 = new JCheckBox ("case 2") ; contenu.add(coche2) ;
coche2.addItemListener (this) ;
etat = new JButton ("État") ; contenu.add(etat) ;
etat.addActionListener(this) ;}
public void itemStateChanged (ItemEvent ev){
Object source = ev.getSource() ;
if (source == coche1) System.out.println ("action case 1") ;
if (source == coche2) System.out.println ("action case 2") ;}
public void actionPerformed (ActionEvent ev) {
System.out.println ("État CASES : " + coche1.isSelected() + " "+ coche2.isSelected()) ;}
private JCheckBox coche1, coche2 ; private JButton etat ;}
public class TestJCheckBox{
public static void main (String args[]){
FenetreCoches fen = new FenetreCoches() ; fen.setVisible(true) ;}}

23
5/9/2024

JRadioButton

Les boutons radio


 Le bouton radio permet à l’utilisateur de choisir une, et une seule, option parmi plusieurs
possibles.
 Les boutons radio sont toujours utilisés en groupe dans l’objectif qu’une seule option peut
être sélectionnée à la fois.
 Le bouton radio est instancié par un constructeur de la classe JRadioButton.
 Par défaut, un bouton radio est construit dans l’état non sélectionné.
 On peut lui imposer l’état sélectionné en utilisant une autre version de constructeur:
JRadioButton rb = new JRadioButton("Option", true) ;
 Notez que l’appel JRadioButton("Option") est équivalent à l’appel JRadioButton("Option",
false).

JRadioButton Exemple 1:

24
5/9/2024

JRadioButton
Exemple 2:
import java.awt.* ; import java.awt.event.* ; import javax.swing.* ;
class FenetreRadioButton extends JFrame implements ActionListener{
public FenetreRadioButton(){
setTitle("Exemple de boutons radio"); setSize(400, 100);
Container contenu = getContentPane();
contenu.setLayout(new FlowLayout());
ButtonGroup groupe = new ButtonGroup();
radio1 = new JRadioButton("Radio1",true);
groupe.add(radio1);contenu.add(radio1);radio1.addActionListener(this);
radio2 = new JRadioButton("Radio 2") ; groupe.add(radio2); contenu.add(radio2); radio2.addActionListener(this);
radio3 = new JRadioButton("Radio 3") ; groupe.add(radio3); contenu.add(radio3); radio3.addActionListener(this);
etat = new JButton("État"); contenu.add(etat); etat.addActionListener(this);}
public void actionPerformed(ActionEvent ev){
Object source = ev.getSource();
if (source == radio1) System.out.println("action radio 1");
if (source == radio2) System.out.println("action radio 2");
if (source == radio3) System.out.println("action radio 3");
if (source == etat) System.out.println("État RADIOS : " + radio1.isSelected() + " "+ radio2.isSelected() + " " +
radio3.isSelected());}
private JRadioButton radio1, radio2, radio3; private JButton etat ;}
public class TestJRadioButton{
public static void main (String args[]){
FenetreRadioButton fen = new FenetreRadioButton() ; fen.setVisible(true) ;}}

JRadioButton
Exemple 3:
import java.awt.* ; import java.awt.event.* ; import javax.swing.* ;
class FenetreRadioButton extends JFrame implements ActionListener, ItemListener{
FenetreRadioButton(){ setTitle ("Exemple de boutons radio"); setSize (400, 100);
Container contenu = getContentPane();
contenu.setLayout(new FlowLayout());
ButtonGroup groupe = new ButtonGroup();
radio1 = new JRadioButton("Radio 1");
groupe.add(radio1); contenu.add(radio1); radio1.addItemListener(this);
radio1.addActionListener(this); radio1.setSelected (true); radio2 = new JRadioButton("Radio 2");
groupe.add(radio2); contenu.add(radio2); radio2.addItemListener(this); radio2.addActionListener(this);
radio3 = new JRadioButton("Radio 3") ; groupe.add(radio3); contenu.add(radio3);
radio3.addItemListener(this); radio3.addActionListener(this);
etat = new JButton ("État") ; contenu.add(etat); etat.addActionListener(this);}
public void itemStateChanged(ItemEvent ev){ Object source = ev.getSource();
if (source == radio1) System.out.println("changement radio 1") ;
if (source == radio2) System.out.println("changement radio 2") ;
if (source == radio3) System.out.println("changement radio 3") ;}
public void actionPerformed(ActionEvent ev){ Object source = ev.getSource() ;
if (source == etat) System.out.println ("État RADIOS : " + radio1.isSelected() + " "
+ radio2.isSelected() + " " + radio3.isSelected()) ;
if (source == radio1) System.out.println("action radio 1") ;
if (source == radio2) System.out.println("action radio 2") ;
if (source == radio3) System.out.println("action radio 3") ;}
private JRadioButton radio1, radio2, radio3; private JButton etat ;}
public class TestJRadioButton{
public static void main (String args[]){FenetreRadioButton fen = new FenetreRadioButton(); fen.setVisible(true);}}

25
5/9/2024

JLabel

Les étiquettes: JLabel


 Un composant de type JLabel permet d’afficher dans un conteneur un texte (d’une seule
ligne) non modifiable par l’utilisateur, mais que le programme peut faire évoluer.
 Le constructeur de JLabel précise le texte initial :
JLabel texte = new JLabel("Texte initial");
 Le programme peut modifier à tout instant le texte d’une étiquette à l’aide de la méthode
setText(), par exemple :
texte.setText("Nouveau texte");

JLabel
Exemple :
import java.awt.*; import java.awt.event.*; import javax.swing.* ;
class FenetreLabel extends JFrame implements ActionListener{
public FenetreLabel(){
setTitle("Essais Etiquettes"); setSize (300, 120) ;
Container contenu = getContentPane() ;
contenu.setLayout(new FlowLayout() ) ;
bouton = new JButton("Compteur") ;
bouton.addActionListener(this) ;
contenu.add(bouton) ;
nbClics = 0;
compte = new JLabel("Nombre de clics sur Compteur = "+ nbClics); contenu.add(compte);}
public void actionPerformed(ActionEvent e){
nbClics++;
compte.setText("nombre de clics sur Compteur = "+nbClics) ;}
private JButton bouton; private JLabel compte; private int nbClics;}
public class TestJLabel{
public static void main (String args[]){
FenetreLabel fen = new FenetreLabel() ;
fen.setVisible(true);}
}

26
5/9/2024

JTextField

Les champs de texte: JTextField


 Un champ de texte (ou boîte de saisie) est une zone rectangulaire (avec bordure) dans
laquelle l’utilisateur peut entrer ou modifier un texte (d’une seule ligne). Il s’obtient en
instanciant un objet de type JTextField.
 Voici quelques exemples de constructions de champs de texte dans un objet de type
JFrame :
JTextField texte1, texte2 ;
texte1 = new JTextField(20) ; // champ de taille 20, initialement vide
texte2 = new JTextField("texte initial", 15) ; // champ de taille 15
// contenant au départ le texte "texte initial"

JTextField

Exploitation usuelle d’un champ de texte


 On peut connaître à tout moment l’information figurant dans un champ de texte en
utilisant la méthode getText(), par exemple :

String ch = texte1.getText(); // on obtient dans la chaine ch le


// contenu actuel du champ de texte texte1

27
5/9/2024

JTextField

Exploitation usuelle d’un champ de texte


Remarque:
Lors de l’exécution on peut modifier la taille d’un champ de texte avec la méthode
setColumns().
Pour que la modification soit immédiatement prise en compte par le Layout Manager, il est
nécessaire de lui appliquer la méthode revalidate() (ou encore d’appliquer la méthode
validate() à son conteneur):
texte1.setComumns(30); // on donne à texte1 une largeur de 30
texte1.revalidate(); // ou encore, si le conteneur est de type JFrame :
// getContententPane().validate() ;

JTextField
Exemple 1:
import java.awt.* ; import java.awt.event.* ; import javax.swing.* ;
class FenetreText extends JFrame implements ActionListener{
public FenetreText (){
setTitle("Saisie de texte"); setSize (300, 120);
Container contenu = getContentPane();
contenu.setLayout(new FlowLayout());
saisie = new JTextField(20); contenu.add(saisie);
bouton = new JButton("COPIER"); contenu.add(bouton); bouton.addActionListener(this) ;
copie = new JTextField(20); copie.setEditable(false); contenu.add(copie);
}
public void actionPerformed(ActionEvent e){
if (e.getSource() == bouton){
String texte = saisie.getText() ;
copie.setText(texte);}}
private JTextField saisie, copie ; private JButton bouton ;}
public class TestJTextField{
public static void main (String args[]){
FenetreText fen = new FenetreText(); fen.setVisible(true);
}
}

28
5/9/2024

JTextField
57

Exemple 2
import java.awt.* ; import java.awt.event.* ; import javax.swing.* ;
class FenetreText extends JFrame implements ActionListener, FocusListener{
public FenetreText(){
setTitle("Saisie de texte"); setSize(300, 100) ; Container contenu = getContentPane();
contenu.setLayout (new FlowLayout()) ;
saisie = new JTextField(20) ;
contenu.add(saisie); saisie.addActionListener(this); saisie.addFocusListener(this) ;
copie = new JTextField(20); copie.setEditable(false); contenu.add(copie);}
public void actionPerformed(ActionEvent e){
System.out.println("validation saisie");
String texte = saisie.getText(); copie.setText(texte);}
public void focusGained(FocusEvent e){
System.out.println("focus sur saisie");}
public void focusLost(FocusEvent e){
System.out.println("perte focus saisie");
String texte = saisie.getText(); copie.setText(texte);}
private JTextField saisie, copie; private JButton bouton;}
public class TestJTextField{
public static void main (String args[]){
FenetreText fen = new FenetreText(); fen.setVisible(true);}}

JTextField
58

Exemple 3
import java.awt.*; import java.awt.event.*; import javax.swing.* ;
import javax.swing.event.* ; // utile pour DocumentListener
class FenetreText extends JFrame implements DocumentListener{
public FenetreText(){
setTitle("Miroir d’un texte"); setSize (300, 110) ;
Container contenu = getContentPane() ;
contenu.setLayout(new FlowLayout()) ;
saisie = new JTextField(20); contenu.add(saisie) ;
saisie.getDocument().addDocumentListener(this) ;
copie = new JTextField(20); copie.setEditable(true);
copie.setBackground(Color.gray); contenu.add(copie);}
public void insertUpdate(DocumentEvent e){
String texte = saisie.getText(); copie.setText(texte);}
public void removeUpdate(DocumentEvent e){
String texte = saisie.getText(); copie.setText(texte);}
public void changedUpdate(DocumentEvent e){}
private JTextField saisie, copie ; private JButton bouton ;}
public class TestJTextField{
public static void main(String args[]){
FenetreText fen = new FenetreText() ; fen.setVisible(true); } }

29
5/9/2024

JTextArea

Les champs de texte multiligne: JTextArea


Une zone de texte multiligne s’obtient en instanciant un objet de type JTextArea.
Les instructions suivantes créent et ajoutent un composant JTextArea avec 40
caractères et 8 lignes à un container:

JTextArea commentaires = new JTextArea(8, 40);


FlowLayout flo = new FlowLayout();
setLayout(flo);
add(commentaires);

JList

Les boîtes de liste: JList


 Un Jlist (boîte de liste) permet de choisir un ou plusieurs objets dans une liste d’objets
prédéfinie.
 Un JList peut être créé à partir d'un tableau d'objets, ou à partir d'un Vector.
 Exemple:
String[] couleurs = {"rouge", "bleu", "gris", "vert", "jaune", "noir" };
JList liste = new JList(couleurs);
 On peut forcer la sélection d’un élément de rang donné par la méthode setSelectedIndex():
liste.setSelectedIndex(2); // sélection préalable de l’élément de rang 2

30
5/9/2024

JList
Exemple:
import java.awt.* ; import javax.swing.* ;
class FenetreList extends JFrame{
public FenetreList(){
setTitle("Exemple JList");
setSize(300, 110);
Container contenu = getContentPane();
contenu.setLayout(new FlowLayout());
String[] couleurs = {"rouge", "bleu", "gris", "vert", "jaune", "noir" };
JList liste = new JList(couleurs);
contenu.add(liste);
}
}
public class TestJList{
public static void main (String args[]){
FenetreList fen = new FenetreList() ;
fen.setVisible(true) ;
}
}

JList

Les différents types de boîtes de liste

 Par défaut, on a affaire à une boîte de type:


MULTIPLE_INTERVAL_SELECTION.

31
5/9/2024

JList

Les différents types de boîtes de liste


 Pour modifier le type de boîte de liste, on utilise la méthode setSelectionMode() d’en-tête :

void setSelectionMode(int modeDeSelection)

 Le paramètre modeDeSelection est l’une des valeurs du tableau précèdent. Ainsi, pour que
la liste précédente permette de ne sélectionner qu’une valeur, on procédera ainsi :

liste.setSelectionMode(SINGLE_SELECTION);//liste sera à sélection simple

JScrollPane
Panneau de défilement: JScrollPane
JScrollPane defil = new JScrollPane(liste) ; // introduit la liste
// dans un panneau de défilement
Il faudra alors prendre soin d’ajouter (par add) au conteneur concerné
non plus la liste elle-même, mais le panneau de défilement; par exemple, pour un conteneur de
type JFrame:
getContentPane().add(defil); // ajoute le panneau au contenu de la fenêtre

On peut modifier ce nombre par la méthode setVisibleRowCount():

liste.setVisibleRowCount(3); // seules 3 valeurs seront visibles a la fois

32
5/9/2024

JScrollPane
Exemple
import java.awt.*; import javax.swing.*;
class FenetreList extends JFrame{
public FenetreList(){
setTitle("Exemple JScrollPane");
setSize(300, 110);
Container contenu = getContentPane();
contenu.setLayout(new FlowLayout());
String[] couleurs = {"rouge", "bleu", "gris", "vert", "jaune", "noir", "red", "blue", "gray", "green",
"yellow",
"black"};
JList liste = new JList(couleurs);
JScrollPane defil = new JScrollPane(liste);
contenu.add(defil);
}
}
public class TestJList{
public static void main (String args[]){
FenetreList fen = new FenetreList() ;
fen.setVisible(true) ;
}
}

JList
Exploitation d’une boîte de liste
Accès aux informations sélectionnées
 Pour une liste à sélection simple, la méthode getSelectedValue() fournit la (seule) valeur de
l’item sélectionné.
 Voici la signature de cette méthode:
Object getSelectedValue()
 Son résultat est de type Object et non String; il faudra donc procéder à une conversion
explicite, comme dans:

String ch = (String) liste.getSelectedValue(); // cast obligatoire ici

33
5/9/2024

JList
Exploitation d’une boîte de liste
Accès aux informations sélectionnées
 Pour les autres types de liste, la méthode getSelectedValue() reste utilisable mais elle fournit
la première des valeurs sélectionnées.
 Pour obtenir toutes les valeurs, on utilisera la méthode getSelectedValues() qui fournit un
tableau d’objets.
 Par exemple, pour afficher (en fenêtre console) toutes les chaînes sélectionnées dans la liste
liste, on pourra procéder ainsi :

Object[] valeurs = liste.getSelectedValues();


for(int i = 0 ; i<valeurs.length ; i++)
System.out.println((String) valeurs[i]) ;

JList
68

Exemple :
import java.awt.*; import java.awt.event.*; import javax.swing.*;
import javax.swing.event.* ; // utile pour ListSelectionListener
class FenetreList extends JFrame implements ListSelectionListener{
public FenetreList(){
setTitle("Essais boite de liste"); setSize(300, 160);
Container contenu = getContentPane();
contenu.setLayout(new FlowLayout());
liste = new JList(couleurs); contenu.add(liste);
liste.addListSelectionListener(this);}
public void valueChanged(ListSelectionEvent e){
if (!e.getValueIsAdjusting()){
System.out.println("**Action Liste - valeurs sélectionnées :") ;
Object[] valeurs = liste.getSelectedValues();
for(int i = 0 ; i<valeurs.length ; i++)
System.out.println ((String) valeurs[i]);}}
private String[] couleurs = {"rouge", "bleu", "gris", "vert", "jaune", "noir" }; private JList liste;}
public class TestJList{
public static void main (String args[]){
FenetreList fen = new FenetreList() ;
fen.setVisible(true);}}

34
5/9/2024

JComboBox

Une boîte combo: JComboBox


 Un JComboBox (boîte combo) permet de combiner un champ de texte et une liste
déroulante.
 Par défaut, le champ de texte associé à un JComboBox n’est pas éditable.
 JComboBox = boîte combo = boîte combinée = liste combinée = boîte de liste
combinée.

JComboBox

Construction d’une boîte combo


 On pourra construire la boîte combo de cette façon :
String[] couleurs = {"rouge", "bleu", "gris", "vert", "jaune", "noir" };
JComboBox combo = new JComboBox(couleurs);
 Pour rendre une boîte combo éditable, on utilisera la méthode setEditable(), par exemple :
combo.setEditable(true); // la boite de texte associée est éditable

35
5/9/2024

JComboBox

Construction d’une boîte combo


 Contrairement à une boîte de liste, la boîte combo sera dotée d’un ascenseur dès que son
nombre de valeurs sera supérieur à 8.
 On peut modifier le nombre de valeurs visibles par la méthode setMaximumRowCount():
combo.setMaximumRowCount(4); // au maximum 4 valeurs affichées

 Comme pour une boîte de liste, on peut forcer la sélection d’un élément de rang donné par
setSelectedIndex():
combo.setSelectedIndex(2); // sélection préalable de l’élément de rang 2

JComboBox

Accès à l’information sélectionnée ou saisie


 La méthode getSelectedItem() fournit la valeur sélectionnée, qu’il s’agisse d’une valeur
provenant de la liste prédéfinie ou d’une valeur saisie dans le champ texte associé.
 Comme la méthode getSelectedValue() des boîtes de liste, elle fournit un résultat de type
Object qu’il faudra souvent convertir en chaîne :

Object valeur = combo.getSelectedItem();

 La méthode getSelectedIndex() fournit aussi le rang de la valeur sélectionnée.

36
5/9/2024

JComboBox
73

Exemple
import java.awt.*; import java.awt.event.*; import javax.swing.*;
class FenetreCombo extends JFrame implements ActionListener, ItemListener{
public FenetreCombo(){
setTitle("Essais boite combinee"); setSize(300, 200) ;
Container contenu = getContentPane();
contenu.setLayout(new FlowLayout());
combo = new JComboBox(couleurs); combo.setEditable(true);
contenu.add(combo);
combo.addActionListener(this); combo.addItemListener(this);}
public void actionPerformed(ActionEvent e){
System.out.print("action combo : ");
Object valeur = combo.getSelectedItem();
System.out.println((String) valeur);}
public void itemStateChanged(ItemEvent e){
System.out.print("item combo : ");
Object valeur = combo.getSelectedItem();
System.out.println((String) valeur);}
private String[] couleurs = {"rouge", "bleu", "gris", "vert","jaune", "noir" }; private JComboBox combo;}
public class TestJCombo{
public static void main(String args[]){FenetreCombo fen = new FenetreCombo(); fen.setVisible(true);}}

JComboBox
Évolution dynamique de la liste d’une boîte combo
 Il n’est pas aisé de faire évoluer le contenu d’une boîte de liste (JList).
 La boîte combo dispose quant à elle de méthodes appropriées à sa modification.
 La méthode addItem() permet d’ajouter une nouvelle valeur à la fin de la liste :
combo.addItem("orange"); // ajoute orange en fin de la liste combo
 La méthode insertItemAt() permet d’insérer une nouvelle valeur à un rang donné
:
combo.addItemAt("rose", 2); // ajoute rose en position 2
 La méthode removeItem() permet de supprimer une valeur existante:
combo.removeItem("gris"); // supprime gris de la liste comboc

37
5/9/2024

JComboBox
Exemple
import java.awt.*; import java.awt.event.*; import javax.swing.* ;
class FenetreCombo extends JFrame implements ActionListener{
public FenetreCombo(){
setTitle("Essais boite combinee"); setSize (300, 200);
Container contenu = getContentPane();
contenu.setLayout(new FlowLayout() );
combo = new JComboBox(couleurs) ;
combo.setEditable(true);
combo.setMaximumRowCount(6);
contenu.add(combo); combo.addActionListener (this);}
public void actionPerformed(ActionEvent e){
System.out.print("action combo - ");
Object valeur = combo.getSelectedItem();
int rang = combo.getSelectedIndex() ;
if (rang == -1){
System.out.println("saisie nouvelle valeur : " + valeur);
combo.addItem (valeur);}
else System.out.println("selection valeur existante : " + valeur + " de rang : " + rang) ;}
private String[] couleurs = {"rouge", "bleu", "gris", "vert", "jaune", "noir" } ; private JComboBox combo ;}
public class TestJCombo{
public static void main(String args[]){ FenetreCombo fen = new FenetreCombo(); fen.setVisible(true); }}

JTable

 Le composant JTable permet d’afficher des tables de données, en permettant


éventuellement l’édition de ces données.
 Un JTable ne contient pas ses données mais les obtient à partir d’un tableau d’objets à 2
dimensions, ou à partir d’un modèle de données. Le rendu et le mode d'édition des
cellules de la table peuvent être modifiés.
 Les cellules sont toutes éditables.
 Les types de données sont traités tous de façon automatique.

38
5/9/2024

JTable
Exemple 1:
import java.awt.BorderLayout; import javax.swing.JFrame;
import javax.swing.JScrollPane; import javax.swing.JTable;
public class TestJTable1 {
public static void main(String args[]) {
JFrame f = new JFrame("JTable Sample");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object rows[][] = { { "A", "Nom 1", "25.94" },
{ "B", "Nom 2", "8.80" },
{ "C", "Nom 3", "221.55" } };
Object columns[] = { "Symbole", "Nom", "Prix" };
JTable table = new JTable(rows, columns);
JScrollPane scrollPane = new JScrollPane(table);
f.add(scrollPane, BorderLayout.CENTER);
f.setSize(300, 200);
f.setVisible(true);
}}

Composants de menus
78

39
5/9/2024

JMenuBar
79

 L’objet JMenuBar est un composant qui permet de créer une barre


de menu.
 La creation d’un objet JMenuBar se fait ainsi:
JMenuBar barreDeMenus = new JMenuBar();
 L’ajout de cet objet JMenuBar à une fenêtre frame:

frame.setJMenuBar(barreDeMenu);//rattache l’objet barreDeMenu à l’objet fenêtre frame

 Pour ajouter des menus dans une barre de menu:


barreDeMenu.add(unMenu);

FIN

40
5/9/2024

Gestionnaires de placement (Layout manager)


81

 Les gestionnaires de placement (layout manager) permettent de


disposer des composants dans un panneau en fonction des
caractéristiques qui leurs sont propres, notamment leur
preferredSize.
 De nombreux gestionnaires de placement sont disponibles en
Swing, et on peut évidemment programmer un gestionnaire de
placement original, si le besoin s'en fait sentir.
 Le LayoutManager doit être ajouté au container, soit lors de l’appel
à son constructeur, soit par la méthode setLayout().
 Tous ces layout managers se trouvent dans le package java.awt.
Remarque importante:
 Un seul LayoutManager est autorisé par container.

Gestionnaires de placement (Layout manager)


82

Pas de gestionnaire
 Le conteneur n'a pas de gestionnaire de placement :
setLayout(null).
 Les composants ont un emplacement et une taille fixe.

41
5/9/2024

Gestionnaires de placement (Layout manager)


83

BorderLayout
 Le conteneur est divisé en 5 zones : nord, sud, est, ouest, et le
centre. Il ne peut donc pas contenir plus de 5 composants.
 Dans les zones nord, sud, est et ouest, les composants sont placés
en fonction de leur taille préférée, le composant du centre occupe
alors toute la place restante.
 Les composants sont séparés horizontalement et verticalement par
des espaces, qui peuvent être modifiés par les méthodes
setHgap(int g) et setVgap(int g).

BorderLayout
84

 Ce layout manager a deux constructeurs:


BorderLayout()
BorderLayout(int hgap, int vgap)

 Le constructeur BorderLayout(int hgap,int vgap) permet de


préciser l'espacement horizontal et vertical des composants.
 Par contre l’autre constructeur BorderLayout() permet de créer un
Layout sans espacement entre les composants.

42
5/9/2024

BorderLayout
85
 Chaque composant est ajouté à son conteneur avec la méthode
add() prenant en second paramètre une des constantes
BorderLayout.NORTH, BorderLayout.SOUTH,
BorderLayout.WEST, BorderLayout.EAST ou
BorderLayout.CENTER, représentant la cellule où sera placé ce
composant.
 Quelle que soit la taille du conteneur, les distances de chacun de
ses composants au bord du conteneur sont déterminées en fonction
de sa largeur ou de sa hauteur « préférée ».

BorderLayout
86

43
5/9/2024

BorderLayout
87

Exemple 1
import java.awt.BorderLayout; import javax.swing.JButton;
import javax.swing.JFrame;
public class Fenetre extends JFrame{
public Fenetre(){
this.setTitle("Bouton");
this.setSize(300, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
//On définit le layout à utiliser sur le content pane
this.setLayout(new BorderLayout());
//On ajoute le bouton au content pane de la Jframe au centre
this.getContentPane().add(new JButton("CENTER"), BorderLayout.CENTER);
//Au nord
this.getContentPane().add(new JButton("NORTH"), BorderLayout.NORTH);
//Au sud
this.getContentPane().add(new JButton("SOUTH"), BorderLayout.SOUTH);
//À l'ouest
this.getContentPane().add(new JButton("WEST"), BorderLayout.WEST);
//À l'est
this.getContentPane().add(new JButton("EAST"), BorderLayout.EAST);
this.setVisible(true);
}
}

BorderLayout
88

Remarque:
 Pour modifier par exemple la taille du composant du centre, on
utilise la méthode setPreferredSize():

button = new JButton("CENTER");


button.setPreferredSize(new Dimension(200, 100));
pane.add(button, BorderLayout.CENTER); //pane objet de ContentPane

44
5/9/2024

BorderLayout
89

Exemple 2

BorderLayout
90

 Pour plus de détails sur ce layout manager:


https://docs.oracle.com/en/java/javase/15/docs/api/java.desktop/java/awt/BorderLayout.html

45
5/9/2024

Gestionnaires de placement (Layout manager)


91

FlowLayout
 Les composants sont placés les uns à la suite des autres
horizontalement, en passant à la ligne suivante quand il n'y a plus
de place sur la ligne. Chaque composant a sa taille préférée.
 Le gestionnaire de placement peut:
 centrer les composants : FlowLayout.CENTER (par défaut)
 aligner à gauche : FlowLayout.LEFT
 aligner à droite : FlowLayout.RIGHT
 leading : FlowLayout.LEADING les composants sont alignés
à partir du début du conteneur ( à gauche si le composant est
orienté ComponentOrientation.LEFT_TO_RIGHT et à
droite si le composant est orienté
ComponentOrientation.RIGHT_TO_LEFT

FlowLayout
92

 Les composant sont séparés horizontalement et verticalement par


des espaces, qui peuvent être modifiés par les méthodes
setHgap(int g) et setVgap(int g)

 Ce layout manager a trois constructeurs:


FlowLayout()
FlowLayout(int align)
FlowLayout(int align, int hgap, int vgap)

46
5/9/2024

FlowLayout
93

 FlowLayout(): Construit un nouveau FlowLayout avec un


alignement centré et un écart horizontal et vertical de 5 unités par
défaut.
 FlowLayout(int align): Permet de préciser l'alignement des
composants dans le conteneur (CENTER, LEFT, RIGHT ... ). Par
défaut, align vaut CENTER
 FlowLayout(int align, int hgap, int vgap): Permet de préciser
l'alignement et l'espacement horizontal et vertical dont la valeur
par défaut est 5.

FlowLayout
94

Exemple 1

47
5/9/2024

FlowLayout
95

Exemple 2
import java.awt.*;
public class MaFenetre extends JFrame {
public MaFenetre() {
super();
setTitle(" Titre de la Fenetre "); setSize(300, 150);
setLayout(new FlowLayout());
add(new Button("Bouton 1"));
add(new Button("Bouton 2"));
add(new Button("Bouton 3"));
pack();
}
public static void main(String[] args) {
MaFenetre f = new MaFenetre();
f.SetVisible();
}
}

FlowLayout
96

Exemple 3
import java.awt.*;
public class MaFenetre extends Frame {
public MaFenetre() {
super(“PlayList”);
setSize(225, 80); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FlowLayout flo = new FlowLayout(); setLayout(flo);
JButton play = new JButton(“Play”);
JButton stop = new JButton(“Stop”);
JButton pause = new JButton(“Pause”);
add(play); add(stop); add(pause);
}
public static void main(String[] args) {
MaFenetre f = new MaFenetre();
f.setVisible(true);
}
}

48
5/9/2024

FlowLayout
97
Exemple 4
import java.awt.*;
public class MaFenetre extends JFrame {
JButton reveButton; JButton foiButton;
JButton implicationButton;
JButton butsButton; JButton actionButton;
public MaFenetre() {
super("Cinq clés de la réussite");
setSize(348, 128); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FlowLayout flo = new FlowLayout(); setLayout(flo);
reveButton = new JButton("LE RÊVE"); foiButton = new JButton("LA FOI");
implicationButton = new JButton("L'IMPLICATION");
butsButton = new JButton("LES BUTS"); actionButton = new
JButton("L'ACTION");
add(reveButton); add(foiButton); add(implicationButton); add(butsButton);
add(actionButton);}
public static void main(String[] args) {
MaFenetre f=new MaFenetre(); f.SetVisible();}}

Gestionnaires de placement (Layout manager)


98

GridLayout
 Ce layout manager a trois constructeurs:
public GridLayout()
public GridLayout(int rows, int columns)
public GridLayout(int rows, int columns, int hGap, int vGap)

49
5/9/2024

GridLayout
99

 Les composants sont placés dans un tableau à deux dimensions de


getColumns() colonnes et getRows() lignes.
 S'il y a plus de getColumns()*getRows() éléments on ajoute autant
de colonnes qu'il faut pour que getColumns()*getRows() soit
supérieur ou égal au nombres de composants du conteneur.
 Les composants sont séparés horizontalement et verticalement par
des espaces, qui peuvent être modifiés par les méthodes
setHgap(int g) et setVgap(int g).
 Le placement dépend de la propriété componentOrientation du
composant.

GridLayout
100

Exemple 1
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Fenetre extends JFrame{
public Fenetre(){
this.setTitle("Bouton");
this.setSize(300, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
//On définit le layout à utiliser sur le ContentPane
this.setLayout(new GridLayout(3, 2)); //Trois lignes sur deux colonnes
//On ajoute le bouton au ContentPane de la JFrame
this.getContentPane().add(new JButton("1"));
this.getContentPane().add(new JButton("2"));
this.getContentPane().add(new JButton("3"));
this.getContentPane().add(new JButton("4"));
this.getContentPane().add(new JButton("5"));
this.pack();
this.setVisible(true);
}
}

50
5/9/2024

GridLayout
101

 Vous pouvez définir le nombre de lignes et de colonnes en


utilisant les méthodes setRows() et setColumns():
GridLayout gl = new GridLayout();
gl.setColumns(2);
gl.setRows(3);
this.setLayout(gl);

GridLayout
102

 Vous pouvez ajouter de l'espace entre les colonnes et les lignes en


utilisant les méthodes setHgap() et setVgap():

GridLayout gl = new GridLayout(3, 2);


gl.setHgap(5); //Cinq pixels d'espace entre les colonnes (H comme Horizontal)
gl.setVgap(5); //Cinq pixels d'espace entre les lignes (V comme Vertical)

 Ou en abrégé :

GridLayout gl = new GridLayout(3, 2, 5, 5);

51
5/9/2024

GridLayout
103

Exemple 2

GridLayout
104

Exemple 3
import javax.swing.*;
import java.awt.GridLayout;
class MaFenetre extends JFrame{
JButton reveButton; JButton foiButton;
JButton implicationButton; JButton butsButton; JButton actionButton;
public MaFenetre() {// constructeur
super("Cinq clés de la réussite");
setSize(348, 128); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout grid = new GridLayout(2, 3); setLayout(grid);
reveButton = new JButton("LE RÊVE"); foiButton = new JButton("LA FOI");
implicationButton = new JButton("L'IMPLICATION");
butsButton = new JButton("LES BUTS");
actionButton = new JButton("L'ACTION");
add(reveButton); add(foiButton); add(implicationButton); add(butsButton);
add(actionButton);
}
}

52
5/9/2024

GridLayout
105

Atelier 1: interface utilisateur d’un clavier de calculatrice

GridLayout
106

Atelier 1: interface utilisateur d’un clavier de calculatrice

53
5/9/2024

GridLayout
107

 Pour plus de détails sur ce layout manager:


https://docs.oracle.com/en/java/javase/15/docs/api/java.desktop/java/awt/GridLayout.html

Gestionnaires de placement (Layout manager)


108

BoxLayout
 Il permet de placer des composants soit horizontalement, soit
verticalement.
 Ce gestionnaire de placement respecte la taille maximum et
l'alignement de chaque composant.
 Il a un seul constructeur:

public BoxLayout(Container cible, int axe)

54
5/9/2024

BoxLayout
109

Les quatre BoxLayout sont :


 X_AXIS : les composants sont placés horizontalement de gauche à droite, en
respectant leur alignement par rapport à une ligne horizontale passant au milieu
du conteneur.
 Y_AXIS : les composants sont placés verticalement de haut en bas, en
respectant leur alignement par rapport à une ligne verticale passant au milieu
du conteneur.
 LINE_AXIS : comme X_AXIS, mais en respectant l'orientation du conteneur,
ce sera éventuellement de droite à gauche.
 PAGE_AXIS : comme Y_AXIS, mais en respectant l'orientation du
conteneur, ce sera éventuellement de bas en haut.

BoxLayout
110

Exemple 1

55
5/9/2024

BoxLayout
111

Exemple 2
import javax.swing.BoxLayout; import javax.swing.JButton;
import javax.swing.JFrame; import javax.swing.JPanel;
public class Fenetre extends JFrame{
public Fenetre(){
this.setTitle("Box Layout"); this.setSize(300, 120);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null);
JPanel b1 = new JPanel();
b1.setLayout(new BoxLayout(b1, BoxLayout.LINE_AXIS)); //On définit le layout en lui indiquant qu'il travaillera en ligne
b1.add(new JButton("Bouton 1"));
JPanel b2 = new JPanel();
b2.setLayout(new BoxLayout(b2, BoxLayout.LINE_AXIS)); //Idem pour cette ligne
b2.add(new JButton("Bouton 2")); b2.add(new JButton("Bouton 3"));
JPanel b3 = new JPanel();
b3.setLayout(new BoxLayout(b3, BoxLayout.LINE_AXIS)); //Idem pour cette ligne
b3.add(new JButton("Bouton 4")); b3.add(new JButton("Bouton 5")); b3.add(new JButton("Bouton 6"));
JPanel b4 = new JPanel();
b4.setLayout(new BoxLayout(b4, BoxLayout.PAGE_AXIS)); //On positionne maintenant ces trois lignes en colonne
b4.add(b1); b4.add(b2); b4.add(b3);
this.getContentPane().add(b4);
this.setVisible(true);
}}

BoxLayout
112

Exemple 3
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Fenetre extends JFrame{
public Fenetre(){
this.setTitle("Box Layout"); this.setSize(300, 120);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
Box b1 = Box.createHorizontalBox(); //On crée un conteneur avec gestion horizontale
b1.add(new JButton("Bouton 1"));
Box b2 = Box.createHorizontalBox(); //Idem
b2.add(new JButton("Bouton 2")); b2.add(new JButton("Bouton 3"));
Box b3 = Box.createHorizontalBox(); //Idem
b3.add(new JButton("Bouton 4")); b3.add(new JButton("Bouton 5")); b3.add(new JButton("Bouton 6"));
Box b4 = Box.createVerticalBox(); //On crée un conteneur avec gestion verticale
b4.add(b1);b4.add(b2);b4.add(b3);
this.getContentPane().add(b4);
this.setVisible(true);
}
}

56
5/9/2024

BoxLayout
113

Exemple 4
import javax.swing.* ; // pour JFrame
class MaFenetre extends JFrame{
JButton reveButton; JButton foiButton; JButton implicationButton;
JButton butsButton; JButton actionButton;
public MaFenetre() {// constructeur
super("Cinq clés de la réussite");
setSize(348, 128); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
reveButton = new JButton("LE RÊVE"); foiButton = new JButton("LA FOI");
implicationButton = new JButton("L'IMPLICATION"); butsButton = new JButton("LES BUTS");
actionButton = new JButton("L'ACTION");
JPanel pane = new JPanel();
BoxLayout box = new BoxLayout(pane, BoxLayout.Y_AXIS);
pane.setLayout(box); pane.add(reveButton); pane.add(foiButton);
pane.add(implicationButton); pane.add(butsButton); pane.add(actionButton);
add(pane);
pack();
}
}

BoxLayout
114

 Pour plus de détails sur ce layout manager:


https://docs.oracle.com/en/java/javase/13/docs/api/java.desktop/javax/swing/BoxLayout.html

57
5/9/2024

Gestionnaires de placement (Layout manager)


115

CardLayout
 Il permet de placer des composants les uns au dessus des autres de
façon qu'un seul composant, celui qui est au dessus, soit visible.
 Les ajouts dans un conteneur géré par un CardLayout se font en
spécifiant pour chaque composant un nom.
add(Component c, String s);
 Le composant affiché est par défaut le premier composant ajouté.
On peut changer le composant affiché en utilisant une des
méthodes de CardLayout.

CardLayout
116

 Ce layout manager a deux constructeurs:


CardLayout()
CardLayout(int hgap, int vgap)

58
5/9/2024

CardLayout
117

Méthode Description
void first(Container parent) Retourne à la première carte du container
void last(Container parent) Retourne à la dernière carte du container
void next(Container parent) Retourne à la carte suivante du container
spécifié.
void show(Container parent, String name) Retourne le composant qui a été ajouté à ce
layout avec le nom spécifié, en utilisant
addLayoutComponent.

 Plus de méthodes:
https://docs.oracle.com/en/java/javase/13/docs/api/java.desktop/java/awt/CardLayout.html

CardLayout
118

Exemple 1
package projetTest;
import java.awt.CardLayout; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.JButton;
import javax.swing.JFrame; import javax.swing.JPanel;
public class TestCardLayout extends JPanel implements ActionListener{
CardLayout card = new CardLayout(50, 50); // Créer le layout
public TestCardLayout() {
setLayout(card); JButton button;
for (int i = 1; i <= 6; i++) {
add(button = new JButton(" Appuyer " + i), "Card" + i); button.addActionListener(this); }}
public void actionPerformed(ActionEvent e) {
card.next(this); // Switch to the next card
}
public static void main(String[] args) {
JFrame f = new JFrame(" Exemple CardLayout Manager ");
f.setBounds(30, 30, 300, 300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(new TestCardLayout()); f.setVisible(true);
}
}

59
5/9/2024

CardLayout
119

Exemple 1/2:
import java.awt.BorderLayout; import java.awt.CardLayout;
import java.awt.Color; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.JButton;
import javax.swing.JFrame; import javax.swing.JPanel;
public class Fenetre extends JFrame{
CardLayout cl = new CardLayout();
JPanel content = new JPanel();
String[] listContent = {"CARD_1", "CARD_2", "CARD_3"}; //Liste des noms de nos conteneurs pour la pile de cartes
int indice = 0;
public Fenetre(){
this.setTitle("CardLayout"); this.setSize(300, 120);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null);
//On crée trois conteneurs de couleur différente
JPanel card1 = new JPanel(); card1.setBackground(Color.blue);
JPanel card2 = new JPanel(); card2.setBackground(Color.red);
JPanel card3 = new JPanel(); card3.setBackground(Color.green);
JPanel boutonPane = new JPanel();
JButton bouton = new JButton("Contenu suivant");

CardLayout
120

Exemple 2/2:
//Définition de l'action du bouton
bouton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
//Via cette instruction, on passe au prochain conteneur de la pile
cl.next(content);}});
JButton bouton2 = new JButton("Contenu par indice");
//Définition de l'action du bouton2
bouton2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
if(++indice > 2)
indice = 0;
//Via cette instruction, on passe au conteneur correspondant au nom fourni en paramètre
cl.show(content, listContent[indice]);}});
boutonPane.add(bouton); boutonPane.add(bouton2);
//On définit le layout
content.setLayout(cl);
//On ajoute les cartes à la pile avec un nom pour les retrouver
content.add(card1, listContent[0]); content.add(card2, listContent[1]); content.add(card3, listContent[2]);
this.getContentPane().add(boutonPane, BorderLayout.NORTH);
this.getContentPane().add(content, BorderLayout.CENTER);
this.setVisible(true);
}
}

60
5/9/2024

Gestionnaires de placement (Layout manager)


121

GridBagLayout
 Ce layout manager a un seul constructeur:
GridBagLayout()
 Pour pouvoir utiliser un GridBagLayout, il faut ajouter les
composants dans le conteneur en leur associant une contrainte de
type GridBagConstraints.
 Une contrainte de type GridBagConstraints contient les
informations suivantes :
 informations de position
 gridx : position en x dans la grille.
 gridy : position en y dans la grille.
 gridwidth : nombre de colonnes occupées par le composant.
 gridheight : nombre de lignes occupées par le composant.

GridBagLayout
122

 Stratégie de mise en forme du composant


 weightx : Poids horizontal du composant (éventuellement 0)
 weighty : Poids vertical du composant (éventuellement 0)
 anchor : ancrage du composant dans la cellule :
 fill : indique comment remplir la cellule si le composant est plus petit
que la cellule:
 GridBagConstraints.HORIZONTAL : largeur ajustée à l’espace
disponible
 GridBagConstraints.VERTICAL : hauteur ajustée à l’espace
disponible
 GridBagConstraints.BOTH : largeur et hauteur ajustées à l’espace
disponible
 GridBagConstraints.NONE : aucun ajustement

61
5/9/2024

GridBagLayout
123

 Stratégie de mise en forme du composant


 insets : espace autour du composant.
 ipadx : espace à gauche et à droite du composant.
 ipady : espace au dessus et en dessous du composant.

GridBagLayout
124

 Ce Layout manager se présente sous la forme d'une grille à la


façon d'un tableau Excel : vous devez positionner vos
composants en vous servant des coordonnées des cellules (qui
sont définies lorsque vous spécifiez leur nombre). Vous devez
aussi définir les marges et la façon dont vos composants se
répliquent dans les cellules

62
5/9/2024

GridBagLayout
125

Exemple 1/2:
import javax.swing.* ; import java.awt.* ;
class MaFenetre extends JFrame{
public static int x[] = { 0, 3, 3, 0, 0, 3} ; public static int y[] = { 0, 0, 1, 2, 3, 2} ;
public static int larg[] = { 3, 2, 2, 3, 3, 2} ; public static int haut[] = { 2, 1, 1, 1, 1, 2} ;
public static int px[] = {60, 40, 0, 0, 0, 0} ; public static int py[] = { 0, 25, 25, 25, 25,
0} ;
public MaFenetre (){
setTitle("Exemple de GridBagLayout") ; setSize (350, 180) ;
Container contenu = getContentPane(); GridBagLayout g = new GridBagLayout() ;
contenu.setLayout (g) ; GridBagConstraints c = new GridBagConstraints() ;
c.fill = GridBagConstraints.BOTH ;
for (int i = 0 ; i<x.length ; i++) { c.gridx = x[i] ; c.gridy = y[i] ; c.gridwidth = larg[i] ;
c.gridheight = haut[i] ; c.weightx = px[i] ; c.weighty = py[i] ;
contenu.add (new JButton ("Bouton"+(i+1)), c) ;}}}
public class TestGridBaglayout{
public static void main (String args[]){
MaFenetre fen = new MaFenetre() ; fen.setVisible(true) ;}}

GridBagLayout
126

Exemple 2/2:

63
5/9/2024

Gestionnaires de placement (Layout manager)


127

Fabriquer un LayoutManager

Gestionnaires de placement (Layout manager)


128

Calculs nécessaires pour placer les composants

64
5/9/2024

Contrôleurs d’évènements (listeners)

Dans le contexte d'une interface graphique (Swing, AWT, etc.), les listeners
permettent au programmeur de réagir suite aux actions de l'utilisateur (clic de
souris, touche du clavier enfoncée, etc.).
 Les « listeners » sont des interfaces. Ces interfaces fournissent une ou
plusieurs méthodes qui peuvent donc être implémentées différemment selon les
cas et les besoins, pour répondre aux événements.

Contrôleurs d’évènements (listeners)

Les interfaces « listener » sont présentes principalement dans le


package java.awt.event, mais également dans le package
javax.swing.event.
Chaque listener dispose d'une classe Event associée. Cette classe étend
java.awt.event.EventObject et fournit une description de l'évènement
capturé. Par exemple, la classe ActionEvent décrit les évènements
capturés par un ActionListener.

65
5/9/2024

Comment utiliser les listeners

ActionListener
 Comme son nom l'indique, un listener utilisé pour réagir aux actions utilisateurs. Celles-ci
sont multiples, la principale étant l'activation d'un bouton (par un clic ou par appui de la
touche Entrée lorsque le bouton est sélectionné).
 Une seule méthode est déclarée dans cette interface :

public void actionPerformed(java.awt.event.ActionEvent e).

 La classe ActionEvent étend la classe java.util.EventObject, et hérite donc de ses méthodes.


Parmi elles, getSource() est particulièrement intéressante. Elle renvoie l'objet concerné par
l'événement (par exemple le bouton qui a été cliqué).

66
5/9/2024

ActionListener
 Cela nous permettra de différencier les composants sources dans l'implémentation de la
méthode actionPerformed().
 La classe ActionEvent fournit quant à elle quelques méthodes spécifiques aux évènements
d'action.
 Les plus utilisées sont getWhen() et getActionCommand().

KeyListener
 Il est utilisé pour réagir aux évènements du clavier, et est donc utilisable sur des
composants permettant la saisie de texte (JTextField, JTextArea, etc.).
 Trois méthodes sont déclarées dans l'interface du KeyListener :
keyTyped(KeyEvent e),
keyPressed(KeyEvent e) et
keyReleased(KeyEvent e).

 Elle permettent respectivement de réagir lorsqu'une touche a été : tapé (pressé puis
relâché), pressé, relâché.
 La classe KeyEvent étend java.util.EventObject et dispose donc des méthodes déclarées
dans cette classe (notamment getSource()).

67
5/9/2024

KeyListener
 La classe KeyEvent fournit également une dizaine d'autres méthodes spécifiques aux
évènements relatifs au clavier, comme:
 getKeyChar() retourne le caractère associé à la touche appuyée,
 getKeyCode() récupère le code de la touche pressée,
 isActionKey() retourne true si la touche appuyée est une touche d'action (CAPS LOCK, Verr
Num, etc.),
 getKeyText(int keyCode) retourne le texte associée à la touche (par ex. F1, A, etc.).

MouseListener
 Il est utilisé pour les événements relatifs à la souris (clics, déplacements).
 5 méthodes sont déclarées dans l'interface MouseListener:
 mouseClicked(MouseEvent e) prévient des clics (la souris a été pressée puis relâchée),
 mousePressed(MouseEvent e) pour les pressions sur la souris (donc on enfonce le bouton sans le
relâcher),
 mouseReleased(MouseEvent e) prévient du relâchement d'un bouton de la souris,
 mouseEntered(MouseEvent e) indique que la souris est entrée dans l'espace d'un composant,
 mouseExited(MouseEvent e) indique que la souris est sortie de l'espace d'un composant.

68
5/9/2024

MouseListener
 La classe MouseEvent étend java.util.EventObject et dispose donc des méthodes déclarées dans
cette classe (notamment getSource()).
 Elle fournit également 12 autres méthodes spécifiques aux événements relatifs à la souris,
comme:
 getButton() retourne le bouton qui a été cliqué,
 getClickCount() retourne le nombre de clics (utile pour gérer le double clic),
 getLocationOnScreen() retourne un objet Point représentant la position de la souris à l'écran,
 isPopupTrigger() précise si le bouton cliqué est celui habituellement utilisé pour afficher la liste
déroulante (bouton droit sur le bureau Windows par exemple).

WindowListener
 Il est utilisé pour les événements relatifs aux fenêtres (activation, fermeture, ouverture, etc.).
 L’interface WindowListener déclare 7 méthodes :
 windowActivated(WindowEvent e) indique que la fenêtre a été activé.
 windowDeactivated(WindowEvent e) indique que la fenêtre n’est plus la fenêtre active.
 windowClosed(WindowEvent e) indique que la fenêtre a été fermé.
 windowClosing(WindowEvent e) indique que l'utilisateur a demandé la fermeture de la fenêtre.
 windowOpened(WindowEvent e) est appelé la première fois que la fenêtre est rendue visible.
 windowIconified(WindowEvent e) indique que la fenêtre a été réduite dans la barre de tâche.
 windowDeiconified(WindowEvent e) indique que la fenêtre a été restauré depuis la barre de tâche.

69
5/9/2024

WindowEvent
 La classe WindowEvent étend java.util.EventObject et dispose donc des méthodes déclarées
dans cette classe (notamment getSource()).
 Elle fournit également 5 autres méthodes spécifiques aux événements relatifs aux fenêtres,
comme:
 getNewState() et getOldState() qui fournissent respectivement le nouvel état et l'ancien état de la
fenêtre,
 getWindow() retourne la fenêtre source de l'événement.

 Afin d'ajouter un WindowListener sur une fenêtre, vous disposez de la méthode


addWindowListener(WindowListener) de la classe Window (étendue par la classe JFrame
notamment).

FocusListener
Il est utilisé pour les événements relatifs au focus clavier.
 Cette interface déclare 2 méthodes :
 focusGained(FocusEvent e) indique que le composant a gagné le focus
clavier.
 focusLost(FocusEvent e) indique que le composant a perdu le focus clavier.

70
5/9/2024

FocusListener
La classe FocusEvent étend java.util.EventObject et dispose donc des méthodes
déclarées dans cette classe (notamment getSource()).
Elle fournit également 3 autres méthodes spécifiques aux événements relatifs
aux fenêtres, comme:
 isTemporary() indique si le composant n’a le focus que temporairement.
 getOppositeComponent() retourne l'autre composant impliqué dans le
changement de focus.
Afin d'ajouter un FocusListener, vous disposez de la méthode
addFocusListener(FocusListener) de la classe Component.

ItemListener
Il est utilisé pour les évènements relatifs aux éléments (liste, checkbox, etc.).
Cette interface déclare une seule méthode :
 itemStateChanged(ItemEvent e) qui indique que l'élément a changé d'état.

71
5/9/2024

ItemListener
 La classe ItemEvent étend java.util.EventObject et dispose donc des méthodes déclarées
dans cette classe (notamment getSource()).
 Elle fournit également 4 autres méthodes spécifiques aux événements relatifs aux fenêtres,
comme:
 getItem() qui retourne l'élément affecté par l'évènement,
 getStateChange() retourne le nouvel état de l'élément (sélectionné ou désélectionné),
 getItemSelectable() qui retourne le composant originaire de l'évènement.
 Afin d'ajouter un ItemListener sur les composants qui le permettent (les boutons,
JcomboxBox, les listes, etc.), vous disposez de la méthode addItemListener(ItemListener).

Utilisation des bases de données


avec JDBC

72
5/9/2024

Intermédiaire
• JDBC: Java database connectivity
• Cette API(Application Programming Interface) à était développée par SUN pour
permettre à des applications Java d'accéder à des bases de données relationnelles
quelconques.
• JDBC: ou driver (pilot) JDBC est un ensemble de classes Java qui permettent
l’utilisation du SGBD par le biais des requêtes SQL.
• Les étapes principales
• Se connecter à une base de données
• Envoyer une requête SQL
• Manipuler le résultat

Choix du pilote
• En Java, il existe un objet « gestionnaire de pilotes » instance de la classe
Driver Manager, chargé de la gestion des différents pilotes de bases de
données existants.
• Pour rendre disponible le bon pilote il faut recourir à la méthode forName de
la classe Class.
• Importer les classes : import java.sql.* ;

73
5/9/2024

Étape 1: charger le pilote


• Charger le pilote (driver)
• Pilote: contient toutes les classes nécessaire pour communiquer avec une
base de données
• il faut utiliser la méthode forName de la classe Class
• E.g.
• SQL Server 2000:
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

Étape 2: établir une connexion


• Pour établir la connexion avec Oracle
try {
Class.forName("oracle.jdbc.driver.OracleDriver"); //.newInstance();
}
catch(ClassNotFoundException ex)
{ System.out.println("Error: unable to load driver class!");
System.exit(1);}

74
5/9/2024

Étape 2: établir une connexion


• Pour établir une connection, on utilise la méthode statique getConnection de la
classe DriverManager, en lui fournissant la reference de la base Identifiant
du SGBDR
• DriverManager.getConnection(String url);
• String URL = "jdbc:oracle:thin:@amrood:1521:EMP";
Identifiant de la base
• String USER = "username"; host:port:databaseName
• String PASS = "password"
• Connection conn = DriverManager.getConnection(URL, USER, PASS);

RDBMS JDBC driver name URL format


MySQL com.mysql.jdbc.Driver jdbc:mysql://hostname/ databaseName
ORACLE oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@hostname:port Number:databaseName
DB2 COM.ibm.db2.jdbc.net.DB2Driver jdbc:db2:hostname:port Number/databaseName
Sybase com.sybase.jdbc.SybDriver jdbc:sybase:Tds:hostname: port Number/databaseName

Étape 3: Requête SQL


• L’exécution d’une requête SQL passe par l'utilisation d'une classe, spécifique
au pilote utilisé, implémentant l'interface Statement
• Un objet de type Statement se doit d'être adapté à la base manipulée. JDBC
ne fournit que l'interface Statement, qui est implantée par différentes classes
dans un pilote
• Obtenir un objet Statement: avec la méthode createStatement.

75
5/9/2024

Exemple
try { String strClassName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String strUrl = "jdbc:microsoft:sqlserver://hostname:1433;" +
"user=sa;password=pass;DatabaseName=dbName";
String strInsert = "INSERT INTO T_Users " + "(Login, Password, ConnectionNumber) " + "VALUES ('Toto', 'Titi', 0);";
Class.forName(strClassName);
Connection conn = DriverManager.getConnection(strUrl);
Créer un objet de type Connection qui
implémente l’interface Statement à l’aide
Statement stAddUser = conn.createStatement(); de la méthode createStatement
stAddUser.executeUpdate(strInsert);
Exécuter un ordre SQL pour mise à jour
conn.close();
}
catch(ClassNotFoundException e) {
// . . .
} catch(SQLException e) {
// . . .
}

Exécuter une requête SELECT


• l'ordre SQL "SELECT * FROM T_Users;"
• L'appel à "executeQuery" renvoie au final un objet de type ResultSet

try {
String strClassName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String strUrl = "jdbc:microsoft:sqlserver://hostname:1433;" + "user=sa;password=pass;DatabaseName=dbName";
String strQuery = "SELECT * FROM T_Users;";
Class.forName(strClassName); requête
Connection conn = DriverManager.getConnection(strUrl);
Statement stLogin = conn.createStatement();

ResultSet rsLogin = stLogin.executeQuery(strQuery); Exécuter la requête et


stocker le résultat
// . . . Utilisation du ResultSet . . .
conn.close(); }
Retourne un résultat de
catch(ClassNotFoundException e) { type ResultSet
// . . .
} catch(SQLException e) {
// . . .
}

76
5/9/2024

Manipuler le résultat
• On peut identifier chaque colonne de la base de donnée
• Par son index
• Par son nom

String strQuery = "SELECT * FROM T_Users;";


ResultSet rsUsers = stUsers.exexcuteQuery(strQuery);
while(rsUsers.next()) {
System.out.print("Id[" + rsUsers.getInt(1) + "]"
+ rsUsers.getString(2)
+ "[" + rsUsers.getString("Password") + "] "
+ rsUsers.getInt("ConnectionNumber") ); }
rsUsers.close();

77

Vous aimerez peut-être aussi