Programmation d'Interface Graphique Java
Programmation d'Interface Graphique Java
BD
Programme
Interface Utilisateur
1
5/9/2024
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.
3
5/9/2024
Le conteneur (Container)
7
4
5/9/2024
10
5
5/9/2024
11
12
6
5/9/2024
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
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
Exemple:
f.setResizable(true);
f.setResizable(false);
19
20
10
5/9/2024
21
22
11
5/9/2024
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
34
17
5/9/2024
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
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
20
5/9/2024
JCheckBox Exemple 1:
JCheckBox
21
5/9/2024
JCheckBox
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
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
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
JTextField
27
5/9/2024
JTextField
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
JList
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
31
5/9/2024
JList
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 :
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
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:
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 :
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
JComboBox
35
5/9/2024
JComboBox
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
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
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
FIN
40
5/9/2024
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
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
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():
44
5/9/2024
BorderLayout
89
Exemple 2
BorderLayout
90
45
5/9/2024
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
46
5/9/2024
FlowLayout
93
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();}}
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
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
GridLayout
102
Ou en abrégé :
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
GridLayout
106
53
5/9/2024
GridLayout
107
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:
54
5/9/2024
BoxLayout
109
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
57
5/9/2024
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
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
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
61
5/9/2024
GridBagLayout
123
GridBagLayout
124
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
Fabriquer un LayoutManager
64
5/9/2024
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.
65
5/9/2024
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 :
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.
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).
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
74
5/9/2024
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) {
// . . .
}
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();
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
77