0% ont trouvé ce document utile (0 vote)
73 vues65 pages

Java 07

Transféré par

boujjoutasnime4
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)
73 vues65 pages

Java 07

Transféré par

boujjoutasnime4
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
Vous êtes sur la page 1/ 65

POO – JAVA

Interface graphique avec Swing


JAVA

Interface Graphique SWING

Noreddine GHERABI ENSA Khouribga


Principes de base
v La plate-forme Java est composée d'un ensemble de libraires
et d'outils qui constituent les briques de base

v Certaines de ces librairies regroupées sous le nom User


Interface Toolkits (anciennement nommées JFC pour Java
Foundation Classes) sont destinées à la gestion des interfaces
utilisateur graphiques (GUI), aux graphiques 2D.

v Ces librairies contiennent les éléments de base qui servent à


écrire des applications Java qui interagissent avec l'utilisateur.

v La gestion des interfaces utilisateur graphiques repose


principalement sur deux librairies de classes : AWT et Swing.
Librairie AWT
v La librairie AWT (Abstract Window Toolkit) a été introduite
dès les premières versions de Java (1.0, 1.1).

v La librairie AWT constitue malgré tout la base sur lequel ont


été élaborées les nouvelles fonctionnalités introduites avec
la plate-forme Java 2 (versions 1.2 et suivantes).

v La plate-forme Java Micro-Edition (J2ME) fait également appel


aux composants AWT pour la gestion de l'interface utilisateur
des assistants personnels (PDA),

v La classe Graphics2D qui comprend toutes les classes


permettant de gérer des graphiques bidimensionnels (2D)
fait également partie de la librairie AWT.
Librairie Swing
v La librairie Swing constitue un kit de développement
d'interfaces utilisateur graphiques.
v La librairie Swing repose sur la librairie AWT mais offre un
grand nombre de nouveaux composants pour la création et
la gestion de l'interface utilisateur.
v Swing offre la possibilité de configurer la représentation
visuelle et le comportement des composants
v L'application peut ainsi prendre un look purement Java
(indépendant de la plate-forme cible) ou alors mimer l'aspect
et le comportement du système de fenêtrage de la plate-forme
d'exécution (par ex. Windows, Macintosh, Motif, etc.).
v Bien que les classes et sous-paquetages de Swing se trouvent
dans la branche javax.swing...., la librairie Swing fait partie
intégrante des librairies de base (core libraries) de la plate-
forme Java.
Classes de base
v Pratiquement tous les composants Swing héritent de la classe JComponent
qui elle-même hérite des classes AWT Container et Component.

Les classes de la plupart des composants Swing commencent par la lettre 'J'
et se distinguent ainsi des composants AWT correspondants :
• Composant 'Bouton' AWT : Button
• Composant 'Bouton' Swing : JButton
Architecture Swing
Principes de base
Principes de base
v Des composants graphiques
(exemple: JFrame, JButton …)
• Hiérarchie de classes
v Des événements et les actions à effectuer
(exemple presser un bouton)
v (Et d'autres choses…)
SWING

❚ Méthode de construction :
❙ Une plaque de base
❙ On ajoute des briques prédéfinies par dessus

❚ Plaque de base : Composants de haut niveau


❙ Fenêtre de base : objets Jframe, Jwindow, Jdialog,
Objets JApplet

❚ Briques prédéfinies : composants ou contrôle


❙ boutons, textfield,etc..

Noreddine GHERABI ENSA Khouribga


Construire une IG
en pratique

❚ Construire une fenêtre de base (JFrame, JDialog, JApplet…)


❚ Construire un conteneur intermédiaire : Jpanel, JScrollPane, …
❚ Ajouter des objets graphiques ou d’autres conteneurs
intermédiaires dans le conteneur intermédiaire.
❚ Ajouter le conteneur intermédiaire à la fenêtre de base
❚ Visualiser la fenêtre de base (méthode setvisible(true))
❚ On peut aussi construire de nouveaux objets graphiques à partir
(héritant) d'autres objets sous forme de classe

Noreddine GHERABI ENSA Khouribga


Insérer des éléments dans la
fenêtre
v Composition d’une fenêtre JFrame
JFrame: Composer
v Ajouter un composant dans Content Pane de JFrame
JFrame f = new JFrame("A Frame");
Haut niveau
JButton b = new JButton(“cliquer");
JPanel pane = new JPanel() Composante
de base
pane.add(b)
Niveau
f.add(pane); intermédiaire

ou JFrame f = new JFrame("A Frame");


JPanel pane = new JPanel();
pane.add(new JButton("Mon bouton"));
f.add(pane);
Quelques Propriétés
JFrame

q setSize(300,100): la taille de la fenêtre


qsetDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLO
SE) : l’état de la fenêtre après fermeture
q ImageIcon image = new ImageIcon("image.jpg");
q fenetre.setIconImage(image.getImage());: icône de la fenetre
q f.setBackground(Color.BLUE);: la couleur de l’arrière plan
qf.setVisible(true);: la visibilité de la fentere
Swing : exemple
import javax.swing.*;
import java.awt.*;
class Deuxboutons {
private JFrame frame; JButton button; JLabel label;
public Deuxboutons(){
frame = new JFrame("Exemple"); // La fenêtre de base et son titre
JPanel pane = new JPanel(); // Le panneau qui contiendra les boutons
button = new JButton("Mon bouton"); // Le bouton
label = new JLabel("Du texte"); // Zone texte
pane.add(button); // Ajout du bouton au Panel
pane.add(label); // Ajout de la zone de texte

frame.add(pane); // Depuis java 1.5, un raccourci


frame.pack(); // Dimensions préférées ou f.setSize(300,200);
frame.setVisible(true); // Sinon, pas visible
}}
public class Test1 { public static void main(String[] args) {
new Deuxboutons(); }
}
Noreddine GHERABI ENSA Khouribga
Swing : exemple
avec héritage
import javax.swing.*;
import java.awt.*;
class Deuxboutons extends JFrame {
private JButton button; JLabel label;
public Deuxboutons(){
super( ex31 : premiere interface");
JPanel pane = new JPanel();
button = new JButton("Mon bouton");
label = new JLabel("Du texte");
pane.add(button);
pane.add(label);
add(pane);
pack();
setVisible(true);
}}
public class Test2{
public static void main(String[] args) {
new Deuxboutons();
}}
Noreddine GHERABI ENSA Khouribga
Swing
❚ Couche logicielle indépendante de la plate forme physique

❚ Modèle-Vue-Contrôleur
❙ modèle : les données à afficher
❙ vue : représentation graphique de ces données
❙ contrôleur : traite des interactions du composant avec l’utilisateur
❙ Avantages
❘meilleure modularité
❘plusieurs vues distinctes pour un même modèle
❘possibilité de modifier l’implémentation d’un modèle (optimisation,
réorganisation, ...) sans rien changer aux vues et aux contrôleurs.

❚ Composants de premier niveau


❙ fille de la fenêtre de fond : objets Jframe, JFenetre, JDialog, JApplet

Noreddine GHERABI ENSA Khouribga


Apports de SWING
❚ Nouveaux objets et capacité accrue
❙ Image dans les boutons
❙ Gestion des bordures de fenêtres
❙ fenêtres de formes non rectangulaires
❙ Jlist, Jtree, Jtable
❙ Java2D API
❙ Fenêtre texte
❘JTextField, JtextArea
❘JPasswordField : masquée
❘JEditorPane, JTextPane : editeur de texte
complet
❘….

Noreddine GHERABI ENSA Khouribga


SWING : les objets de base
❚ Les boutons
❙ Classique : JButton
❙ JCheckBox pour les case à cocher
❙ JRadioBouton pour un ensemble de bouton
❙ JMenutItem pour un bouton dans un menu
❙ JCheckBoxMenuItem
❙ JRadioButtonMenuItem
❚ JComboBox : composant permettant de faire un choix parmi plusieurs
propositions
❚ JList : liste à choix multiple en colonne
❚ JSlider : saisie et visualisation graphique d’un nombre entre 2 valeurs
❚ JTextField: permet d’écrire du texte dans une zone monoligne
❚ JTextArea: permet d’écrire du texte dans une zone multiligne
❚ JLabel: permet d’afficher du texte ou une image
❚ JTree : affiche une arborecense

Noreddine GHERABI ENSA Khouribga


SWING : les objets de base

Noreddine GHERABI ENSA Khouribga


SWING : les contrôles de base
• Jlabel : JLabel jLabel1 =new JLabel("Mon texte dans JLabel");

• JButton: JButton bouton = new JButton("Mon


bouton",imageNormale);

• ButtonGroup: ButtonGroup groupe = new ButtonGroup();

• JCheckBox: JCheckBox bouton1 = new JCheckBox("Bouton 1");

• JRadioButton : JRadioButton bouton1 = new


JRadioButton("Bouton1");

• JTextField : JTextField testField1 = new JTextField ("mon texte");

• JPasswordField : JPasswordField passwordField1 = new


JPasswordField ("");

Noreddine GHERABI ENSA Khouribga


SWING : les contrôles de base
import javax.swing.*; import java.awt.*;
class Testswing extends JFrame {
public Testswing(){
super("les controles de base");
JPanel pane = new JPanel();
pane.add(new JButton("Mon bouton"));
pane.add(new JLabel("Du texte"));
pane.add(new JRadioButton("Bouton Radio"));
pane.add(new JCheckBox("Case a cocher"));
String [] texte = { "aa","bb","cc","dd"};
pane.add(new JComboBox(texte));
pane.add(new JSlider(JSlider.HORIZONTAL,0,5,3));
pane.add(new JTextField(5));
getContentPane().add(pane);
pack(); setVisible(true);
}}
public class Test3 {
public static void main(String[] args) { new Testswing();}
}

Noreddine GHERABI ENSA Khouribga


Comment positionner
les composants

❚ Pas de positionnement statique et fixé à l’avance


❚ Disposition et dimensionnement des objets dans une IG
❙ Effectué à l'initialisation et au redimensionnement
❙ dépend de l'ordre de création
❙ de la politique de placement du containeur
❘ Flowlayout : ligne/ligne
❘ Borderlayout : position du composant défini par les points
cardinaux (4+1)
❘gridlayout : grille (un par case) remplie de gauche à droite, de haut
en bas
❙ méthode setlayout(new borderlayout) : positionnement de la
politique
❙ pack() oblige les composants à prendre leur taille "préférée"
❙ composant visible ou non : setVisible()

Noreddine GHERABI ENSA Khouribga


Positionnement dans une IG

Noreddine GHERABI ENSA Khouribga


Swing : Borderlayout
import javax.swing.*;
import java.awt.*;

class TestBorder extends JFrame {


public TestBorder(){ super("Test du Border");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pane = new JPanel(new BorderLayout());
pane.add(new JButton("Mon bouton"),BorderLayout.NORTH);
pane.add(new JLabel("Dutexte",JLabel.CENTER),BorderLayout.SOUTH);
pane.add(new JRadioButton("Bouton Radio"),BorderLayout.EAST);
pane.add(new JCheckBox("Case a cocher"),BorderLayout.WEST);
String [] texte = { "aa","bb","cc","dd"};
pane.add(new JComboBox(texte),BorderLayout.CENTER);
getContentPane().add(pane); setVisible(true);
}
}

public class Test4 {


public static void main(String[] args) {
new TestBorder();
}
}
Noreddine GHERABI ENSA Khouribga
Swing : Gridlayout
import javax.swing.*; import java.awt.*;

class TestGrid extends JFrame {


public TestGrid(){ super("Test du grid");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pane = new JPanel(new GridLayout(3,2));
pane.add(new JButton("Mon bouton"));
pane.add(new JLabel("Du texte",JLabel.CENTER));
pane.add(new JRadioButton("Bouton Radio"));
pane.add(new JCheckBox("Case a cocher"));
String [] texte = { "aa","bb","cc","dd"};
pane.add(new JComboBox(texte));
pane.add(new JSlider(JSlider.HORIZONTAL,0,5,3));
pane.add(new JTextField(5));
getContentPane().add(pane); setVisible(true);
}}
public class Test4{
public static void main(String[] args) {
new TestGrid();
}
}

Noreddine GHERABI ENSA Khouribga


Swing : GridBaglayout
public Form(){
super("Position");
setDefaultCloseOperation(EXIT_ON_CLOSE);
JLabel lnom= new JLabel("Nom :");
JTextField nom= new JTextField(10);
JLabel lprenom= new JLabel("Prénom :");
JTextField prenom= new JTextField(10);
JButton b1 = new JButton("Valider");
setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
gc.gridx=0;
gc.gridy=0;
add(lnom,gc);
gc.gridx=1;
gc.gridy=0;
add(nom,gc);

setSize(400,400);
setVisible(true);

Noreddine GHERABI ENSA Khouribga


Structurer une interface :
description hiérarchique

Noreddine GHERABI ENSA Khouribga


Structurer l’interface
import javax.swing.*;
import java.awt.*;
// L'ordre d'inclusion n'a pas d'importance, les ajouts sont répercutés immédiatement
class Pandanspan extends Jframe {
public Pandanspan () {
super("Hierarchique"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton button1 = new JButton("bouton1");
JLabel label1 = new JLabel("texte1");
JLabel label2 = new JLabel("texte2");
JButton button2 = new JButton("bouton2");
JButton button3 = new JButton("bouton3");
JButton button4 = new JButton("bouton4");
JButton button5 = new JButton("bouton5");
JPanel pane1 = new JPanel(new BorderLayout()); //layout spécifié à la construction
JPanel pane2 = new JPanel(new BorderLayout());
JPanel pane3 = new JPanel(new BorderLayout());
pane1.add(button1, BorderLayout.EAST); pane1.add(label1, BorderLayout.WEST);
pane1.add(pane2, BorderLayout.CENTER); pane2.add(button2, BorderLayout.NORTH);
pane2.add(button3, BorderLayout.SOUTH); pane2.add(pane3, BorderLayout.CENTER);
pane3.add(button4, BorderLayout.EAST); pane3.add(button5, BorderLayout.WEST);
pane3.add(label2, BorderLayout.CENTER);
getContentPane().add(pane1, BorderLayout.CENTER); pack(); setVisible(true);
}}
public class Test6 {
public static void main(String[] args) { new Pandanspan(); }
}
Noreddine GHERABI ENSA Khouribga
ButtonGroup / JRadioButton
import javax.swing.*;
public class TestGroupButton1 {
public static void main(String argv[]) {
JFrame f = new JFrame("ma fenetre");
f.setSize(300,100);
JPanel pannel = new JPanel();
ButtonGroup groupe = new ButtonGroup();
JRadioButton bouton1 = new JRadioButton("Bouton 1");
groupe.add(bouton1);
pannel.add(bouton1);
JRadioButton bouton2 = new JRadioButton("Bouton 2");
groupe.add(bouton2);
pannel.add(bouton2);
JRadioButton bouton3 = new JRadioButton("Bouton 3");
groupe.add(bouton3);
pannel.add(bouton3);
f.getContentPane().add(pannel);
f.setVisible(true);
}
} Noreddine GHERABI ENSA Khouribga
Classe JChechBox
import javax.swing.*;
public class TestJCheckBox1 {
public static void main(String argv[]) {

JFrame f = new JFrame("ma fenetre");


f.setSize(300,100);
JPanel pannel = new JPanel();

JCheckBox bouton1 = new JCheckBox("Bouton 1");


pannel.add(bouton1);
JCheckBox bouton2 = new JCheckBox("Bouton 2");
pannel.add(bouton2);
JCheckBox bouton3 = new JCheckBox("Bouton 3");
pannel.add(bouton3);
f.getContentPane().add(pannel);
f.setVisible(true);
}}

Noreddine GHERABI ENSA Khouribga


Classe JComboBox
import java.awt.Dimension;
import javax.swing.*;

public class Fenetre extends JFrame {


private JPanel container = new JPanel();
private JComboBox combo = new JComboBox();
private JLabel label = new JLabel("Une ComboBox");

public Fenetre(){
//…
combo.setPreferredSize(new Dimension(100, 20));
combo.addItem("Option 1");
combo.addItem("Option 2");
combo.addItem("Option 3");
combo.addItem("Option 4");
//…
}
}

Noreddine GHERABI ENSA Khouribga


Classe JTextField
import javax.swing.*;

public class JTextField1 {

public static void main(String argv[]) {

JFrame f = new JFrame("ma fenetre");


f.setSize(300, 100);
JPanel pannel = new JPanel();

JTextField testField1 = new JTextField ("mon texte");

pannel.add(testField1);
f.getContentPane().add(pannel);
f.setVisible(true);
}
}

Noreddine GHERABI ENSA Khouribga


Classe JTextArea
import java.awt.Dimension;
import javax.swing.*;

public class JTextArea1 {

public static void main(String argv[]) {

JFrame f = new JFrame("ma fenetre");


f.setSize(300, 100);
JPanel pannel = new JPanel();
JTextArea textArea1 = new JTextArea ("mon texte");
JScrollPane scrollPane = new JScrollPane(textArea1);
scrollPane.setPreferredSize(new Dimension(200,70));
pannel.add(scrollPane);
f.getContentPane().add(pannel);
f.setVisible(true);
}
}

Noreddine GHERABI ENSA Khouribga


Les onglets

La classe javax.swing.JTabbedPane encapsule un ensemble


d'onglets. Chaque onglet est constitué d'un titre, d'un composant
et éventuellement d'une image.

Pour utiliser ce composant, il faut :


Ø instancier un objet de type JTabbedPane
Ø créer le composant de chaque onglet
Ø Ajouter chaque onglet à l'objet JTabbedPane en utilisant la
méthode addTab()

Noreddine GHERABI ENSA Khouribga


Les onglets
import java.awt.Dimension;
import javax.swing.*;
public class TestJTabbedPane1 {
public static void main(String[] args) {
JFrame f = new JFrame("Test JTabbedPane");
f.setSize(320, 150);
JPanel pannel = new JPanel();
JTabbedPane onglets = new JTabbedPane(SwingConstants.TOP);
JPanel onglet1 = new JPanel();
JLabel titreOnglet1 = new JLabel("Onglet 1");
onglet1.add(titreOnglet1);
onglet1.setPreferredSize(new Dimension(300, 80));
onglets.addTab("onglet1", onglet1);
JPanel onglet2 = new JPanel();
JLabel titreOnglet2 = new JLabel("Onglet 2");
onglet2.add(titreOnglet2);
onglets.addTab("onglet2", onglet2);

pannel.add(onglets);
f.getContentPane().add(pannel);
f.setVisible(true); } }

Noreddine GHERABI ENSA Khouribga


Labels et Onglets
❚ JLabel : Image possible
panneau3.add(new JLabel("JLabel avec du texte
Icon image = new ImageIcon("image.jpg"); seulement"));
JLabel labelImage = new JLabel(image); jtp.addTab("Image & Texte", panneau1);
❚ JTabbedPane : Onglet jtp.addTab("image seule", panneau2);
❙ addTab : ajoute un onglet jtp.addTab("texte seul", panneau3);
import java.awt.*; add(jtp, BorderLayout.CENTER);
import java.util.*; }
import java.awt.event.*; public static void main(String args[]) {
import javax.swing.*; JFrame jf = new JFrame("Tabbed Pane Test");
public class TabTest extends JPanel { TabTest tt = new TabTest();
private JTabbedPane jtp; jf.getContentPane().add(tt,
private JLabel labelImage; BorderLayout.CENTER);
private JPanel panneau1 = new JPanel(); jf.setSize(600,300);
private JPanel panneau2 = new JPanel(); jf.setVisible(true);
private JPanel panneau3 = new JPanel(); }
public TabTest() { }
setLayout(new BorderLayout());
jtp = new JTabbedPane();
Icon image = new ImageIcon("dauphin09.jpg");
labelImage = new JLabel("dauphins nageants", image,
SwingConstants.CENTER);
panneau1.add(labelImage);
Icon image2 = new ImageIcon("chien.gif");
panneau2.add(new JLabel(image2));

Noreddine GHERABI ENSA Khouribga


Labels et Onglets

Noreddine GHERABI ENSA Khouribga


Menu
1. Création d’une barre de menu
§ JMenuBar barreMenu=new JMenuBar();
2. Création d’un menu, type Fichier, Edition, ….
• JMenu menu=new JMenu("Formes");
3. Création des éléments du menu
• JMenuItem item1=new JMenuItem("Sauver");
4. Ajout des éléments au menu
• menu.add(item1);
5. Ajout du menu à la barre
• barreMenu.add(menu);
6. Ajouter la barre dans la fenêtre
• fenetre.setJMenuBar(barre);

Remarque : un JMenuItem génère un événement de type ActionEvent lorsqu’il


est sélectionné

Noreddine GHERABI ENSA Khouribga


Menu
import javax.swing.*;
class TestMenu extends JFrame {
private JMenuBar menuBar;
public TestMenu() { super("exemple"); creationMenu();
getContentPane().add(new JPanel());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,300); setVisible(true); }
private void creationMenu() {
menuBar = new JMenuBar();
JMenu menu = new JMenu("Fichier");
JMenu menu2 = new JMenu("Formes");
JMenu submenu = new JMenu("Formes simples");
menu.add(new JMenuItem("Nouveau"));
menu.add(new JMenuItem("Ouvrir"));
menu.add(new JMenuItem("Sauver"));
menu2.add(submenu);
submenu.add(new JMenuItem("Rectangle"));
submenu.add(new JMenuItem("Cercle"));
menuBar.add(menu); menuBar.add(menu2);
setJMenuBar(menuBar); }}
public class Test7 {
public static void main (String []arg) { new TestMenu(); }
}

Noreddine GHERABI ENSA Khouribga


Barre d’outils
1. Création d’une barre d’outils
§ JToolBar barre=new JToolBar ();
2. Ajouter des boutons dans la barre
§ barre.add(bouton);
§ barre.addSeparator();

Noreddine GHERABI ENSA Khouribga


JAVA

Gestion des évènements en SWING

Noreddine GHERABI ENSA Khouribga


Gestion des événements

❚ Que se passe t il ?
❙ quand on appuie sur un bouton,
❙ quand on ferme une fenêtre,
❙ quand on bouge la souris …
❚ Un événement contenant le lieu, la nature et l’objet
« actionné » est créé par le système graphique. Cet événement
est différent selon qu’il s’agit d’un clic sur un bouton, le
déplacement de la souris, etc…
❚ Le « dispatcher » envoie cet événement aux objets qui se sont
déclarés intéressés par cet événement

Noreddine GHERABI ENSA Khouribga


Gestion des événements

❚ Qui est intéressé ?


❙ Des objets de type écouteur
❙ C’est le bouton qui provoque les événements qui autorise
les écoutes.
❙ Les objets écouteurs définissent les actions qui doivent
avoir lieu
❙ Cette action est définie par un <typeevenement>Listener,
fonction qui précise l’entête des fonctions gérant l’action.

Noreddine GHERABI ENSA Khouribga


Ecouter un bouton

❚ Il faut créer l’interface graphique :


❙ une fenêtre de base
❙ Un bouton
❚ Il faut créer la classe qui écoute : elle implémente l’interface
actionlistener qui permet de gérer les clics sur un bouton, les
sélections de menu
❙ On définit dans cette classe la méthode
actionPerformed(…) qui explicite ce qui doit être fait
quand on clique sur un bouton : ici on affiche sur la
fenêtre console le texte « Action sur le bouton »

Noreddine GHERABI ENSA Khouribga


Ecouter un bouton

❚ On crée un objet de cette classe : objetecoutant


❙ En pratique, le nom de la variable est souvent inutile : on
crée des objets anonymes, sans nom
❚ On enregistre cet objet auprès du bouton par la méthode
addActionListener, car c’est quand même le bouton qui
autorise ou non l’écoute

Noreddine GHERABI ENSA Khouribga


Ecouter un bouton et réagir
import javax.swing.*; import java.awt.*; import java.awt.event.*;
class Ecouteur1 extends JFrame {
private JButton button;
public Ecouteur1 () { super("exemple ecouteur 1");
button = new JButton("Appuyer pour afficher un texte");
Monecouteur objetecoutant = new Monecouteur();
button.addActionListener(objetecoutant);
add(button, BorderLayout.CENTER);
pack(); setVisible(true);
} /* Classe interne à la classe ecouteur1 souvent utilisée pour les listener
On peut aussi définir une classe externe. */
class Monecouteur implements ActionListener {
public void actionPerformed(ActionEvent event) {
System.out.println("Action sur le bouton"); }
}}
public class Test8{
public static void main(String[] args) { new Ecouteur1();}
}

Noreddine GHERABI ENSA Khouribga


Quelques Méthodes

❚ Les évènements sont typés, organisé en classes


❘Mouse ⎝ MouseEvent , clicbouton ⎝ ActionEvent

❚ Méthodes utiles
❙ String getActionCommand() : retourne la chaîne associée à
l'évènement
❙ int getModifiers() : entier contenant les touches enfoncées par
l'utilisateur (SHIFT,CTR)
❙ Object getSource() : composant émettant l'événement
❙ int getID() : retourne le type de l’événement
❙ long getWhen() : retourne le temps écoulé depuis l’apparition de
l’évènement

Noreddine GHERABI ENSA Khouribga


Ecouter 2 boutons 2 écouteurs

❚ Une application qui affiche un compteur mis à jour par 2 boutons


❚ Il faut créer l’interface graphique :
❙ une fenêtre de base
❙ un bouton « plus », un bouton « moins »
❙ Un label qui affiche le compteur
❙ Une variable entière contenant le compteur
❚ Pour gérer les boutons, plusieurs solutions
❙ Version objet avec 2 écouteurs : une classe écouteur spécifique pour
chaque bouton. Il y a donc 2 classes, une pour le moins, une pour le
plus. Aucun test n’est à faire dans l'écouteur, puisqu’il sait quel bouton
est utilisé
❙ Version 1 écouteur : une seule classe écouteur, qui teste si le composant
d’où provient l’événement est le bouton plus ou le bouton moins
❙ Version 1 écouteur this : la classe écouteur est la classe qui définit
l’application elle-même

Noreddine GHERABI ENSA Khouribga


Ecouter 2 boutons 2 écouteurs
import javax.swing.*; import java.awt.*; import java.awt.event.*;
// Deux boutons : un qui décrémente, un qui incrémente
class Ecouteur2 extends JFrame {
private int count = 0; JLabel label; JButton buttonPlus, buttonMoins;
private void creationinterface() {
buttonPlus = new JButton("plus"); buttonMoins = new JButton("moins");
label = new JLabel("0", JLabel.CENTER);
JPanel buttons = new JPanel(new GridLayout(0, 1));
buttons.add(buttonPlus); buttons.add(buttonMoins);
JPanel pane = new JPanel(new BorderLayout());
pane.add(buttons, BorderLayout.WEST);
pane.add(label, BorderLayout.CENTER);
getContentPane().add(pane, BorderLayout.CENTER);
pack(); setVisible(true); }
public Ecouteur2() { super("exemple"); creationinterface();
buttonPlus.addActionListener(new MyActionListener1());
buttonMoins.addActionListener(new MyActionListener2());
addWindowListener(new MyWindowListener ());
}
Noreddine GHERABI ENSA Khouribga
Ecouter 2 boutons : 2 écouteurs
private class MyActionListener1 implements ActionListener {
public void actionPerformed(ActionEvent event) {
count++; label.setText(Integer.toString(count));
} }
private class MyActionListener2 implements ActionListener {
public void actionPerformed(ActionEvent event) {
count--; label.setText(Integer.toString(count));
}
} // Remarque ; les classes internes ont accès aux champs de l’interface
private class MyWindowListener extends WindowAdapter {
public void windowClosing(WindowEvent event) { System.exit(0); }
}}
public class Test9 {
public static void main(String[] args) { new Ecouteur2(); }
}

Noreddine GHERABI ENSA Khouribga


Ecouter 2 boutons : 1 seul écouteur

private class MyActionListener implements ActionListener {


public void actionPerformed(ActionEvent event) {
if(event.getSource() == buttonPlus) count++; else count--;
label.setText(Integer.toString(count));
}
}
private class MyWindowListener extends WindowAdapter {
public void windowClosing(WindowEvent event) { System.exit(0); }
}
}
public class Test10 {
public static void main(String[] args) { new Ecouteur2(); }
}

Noreddine GHERABI ENSA Khouribga


Ecouter 2 boutons : 1 ecouteur=this
import javax.swing.*; import java.awt.*; import java.awt.event.*;
class Ecouteur2 extends WindowAdapter implements ActionListener {JFrame frame;
private int count = 0; JLabel label; JButton buttonPlus, buttonMoins;
private void creationinterface() { frame=new JFrame("Exemple");
buttonPlus = new JButton("plus"); buttonMoins = new JButton("moins");
label = new JLabel("0", JLabel.CENTER);
JPanel buttons = new JPanel(new GridLayout(0, 1));
buttons.add(buttonPlus); buttons.add(buttonMoins);
JPanel pane = new JPanel(new BorderLayout());
pane.add(buttons, BorderLayout.WEST);
pane.add(label, BorderLayout.CENTER);
frame.getContentPane().add(pane, BorderLayout.CENTER);
frame.pack(); frame.setVisible(true);
}
public Ecouteur2() { creationinterface();
buttonPlus.addActionListener(this);
buttonMoins.addActionListener(this);
frame.addWindowListener(this);
}
public void actionPerformed(ActionEvent event) {
if(event.getSource() == buttonPlus) count++;
if(event.getSource() == buttonMoins) count--;
label.setText(Integer.toString(count));
}
public void windowClosing(WindowEvent event) { System.exit(0); }
}
public class Test11{public static void main(String[] args) { new Ecouteur2(); } }

Noreddine GHERABI ENSA Khouribga


Les actions sur une fenêtre
❚ Il faut créer l’interface graphique : c’est le même code
❚ Il faut créer une classe (ici Monecouteurfenetre) qui implémente l’interface
windowlistener qui permet de gérer les fenêtres
❙ Il faut définir 7 méthodes, même si elles sont vides
❘void windowOpened(WindowEvent e) : ouverture de la fenêtre
❘void windowClosed(WindowEvent e) : après la fermeture de la fenêtre
❘void windowClosing(WindowEvent e) : au moment de la fermeture de la
fenetre
❘void windowIconified(WindowEvent e) : iconifier la fenêtre
❘void windowDeiconified(WindowEvent e) : deiconifier de la fenetre
❘void windowActivated(WindowEvent e) : focus dans la fenêtre; Utiliser de
préférence windowGainedFocus de WindowFocusListener
❘void windowDeactivated(WindowEvent e) : perte du focus de la fenetre.
Utiliser de préférence windowLostFocus de WindowFocusListener
❚ On crée un objet anonyme, sans nom car c’est inutile
❚ On enregistre cet objet auprès de la fenêtre par la méthode addWindowListener

Noreddine GHERABI ENSA Khouribga


Les adapteurs
❚ Gérer les événements par adaptateur
❙ une interface listener : toutes les méthodes doivent être écrites, même vides
❙ exemple : windowsListener : 7 méthodes à redéfinir
❘windowActivated, windowClosed, windowClosing,
WindowDeactivated, windowDeiconified, windowIconified,
windowOpened
❙ Un adaptateur : une classe contient déjà une version vide ⎝ on ne
surcharge que les fonctionnalités dont on a besoin
❙ Attention : la classe ecouteur HERITE de la classe Adapter au lieu de
IMPLEMENTE une interface
❘KeyAdapter
❘MouseAdapter
❘MouseMotionAdapter
❘WindowAdapter

Noreddine GHERABI ENSA Khouribga


Les adapteurs

Solution en implémentant l’interface


class Terminator implements WindowListener
{
public void windowClosing (WindowEvent e) {System.exit(0);}
public void windowClosed (WindowEvent e) {}
public void windowIconified (WindowEvent e) {}
public void windowOpened (WindowEvent e) {}
public void windowDeiconified (WindowEvent e) {}
public void windowActivated (WindowEvent e) {}
public void windowDeactivated (WindowEvent e) {}
}

Solution en utilisant un WindowAdapter


class Terminator extends WindowAdapter
{
public void windowClosing (WindowEvent e) {System.exit(0);}
}

AWT et Swing 56
Les actions sur une fenêtre
import javax.swing.*; import java.awt.*; import java.awt.event.*;
class Ecouteur1 {
private JButton button; JFrame frame;
public Ecouteur1 () { frame=new JFrame("exemple ecouteur 1");
button = new JButton("Appuyer pour afficher un texte");
Monecouteur objetecoutant = new Monecouteur();
button.addActionListener(objetecoutant);
frame.addWindowListener(new Monecouteurfenetre());
frame.add(button, BorderLayout.CENTER);
frame.pack(); frame.setVisible(true); }
class Monecouteur implements ActionListener {
public void actionPerformed(ActionEvent event) {
System.out.println("Action surle bouton"); } }
class Monecouteurfenetre implements WindowListener {
public void windowClosing(WindowEvent event) { System.exit(0); }
public void windowClosed(WindowEvent e) {}
public void windowOpened(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
}}
public class Test12 { public static void main(String[] args) { new Ecouteur1();}}

Noreddine GHERABI ENSA Khouribga


Résumé
❚ la gestion des événements est faite par délégation par un listener ou un adapter
❙ l'événement n'est pas géré par le composant source de l’événement mais par un objet qui
s'est déclaré intéressé (écouteur) par ce type d'événement au moyen de add<type>Listener()
ou set<type>Listener() auprès de l'objet source
❙ cet objet écouteur doit implanter la ou les méthodes précisées par le type de listener. Ces
méthodes décrivent ce qui doit être fait avec l'événement. Un listener est une interface au
sens Java du terme. Il faut définir toutes les méthodes de l’interface, même si elles sont
vides.
❙ Un adapter est une classe contenant des versions vides des méthodes. On redéfinit
uniquement celles qui sont nécessaires. Une classe ecouteur doit alors héritée de l’adapter.
❙ s'il existe plusieurs objets écouteurs, tous reçoivent une copie de l'événement dans un ordre
non défini.
❙ Si aucun listener n'est défini, l'événement est ignoré
❙ un écouteur peut écouter plusieurs sources différentes
❙ Un objet peut écouter plusieurs boutons
❙ Un objet peut écouter les événements issu de ses propres composants
❚ En pratique
❙ Définir et cééer l’interface graphique et ses boutons.
❙ Définir les écouteurs et les actions : ecrire les classes (Monecouteur) et méthodes
(ActionPerformed)
❙ Créer les ecouteurs des différents composants graphiques (new Monecouteur())
❙ Enregistrer les ecouteurs aupres des boutons à écouter (addActionListener(…))

Noreddine GHERABI ENSA Khouribga


Les Actions sur la souris
❚ Interface ActionListener
❙ Utilisée par les clics bouton, choix de menu, et les CR dans un
zone de texte (JTextField, JTextArea)
❙ Méthodes à définir
❘void actionPerformed(ActionEvent e) : que faire lors de
l'apparition d’un des évènements
❚ Interface MouseListener ou classe MouseAdapter
❙ Utilisée pour les actions souris entrant et sortant dans la
fenêtre, les clics dans la fenêtre
❙ Méthodes à définir
❘ void mouseClicked(MouseEvent e) : clic dans la fenêtre
❘ void mouseEntered(MouseEvent e) : souris entrant dans la fenêtre
❘ void mouseExited(MouseEvent e) : souris sortant de la fenêtre
❘ void mousePressed(MouseEvent e) : touche souris appuyée dans la
fenêtre
Noreddine GHERABI ENSA Khouribga
Les Actions sur la souris
❙ Méthodes utiles
❘boolean isLeftMouseButton(MouseEvent e) : vrai si e
concerne le bouton gauche de la souris
❘boolean isMiddleMouseButton(MouseEvent e) : vrai si e
concerne le bouton milieu de la souris
❘boolean isRightMouseButton(MouseEvent e) : vrai si e
concerne le bouton droit de la souris
❚ Interface MouseMotionListener ou classe
MouseMotionAdapter
❙ Utilisée pour les déplacement souris dans la fenêtre
❙ Méthodes à définir
❘void mouseDragged(MouseEvent e) : clic dans la fenêtre
❘void mouseMovedMouseEvent e) : déplacement souris
dans la fenêtre

Noreddine GHERABI ENSA Khouribga


Les Actions sur la souris
Exemple
import javax.swing.*;import java.awt.event.*;import java.awt.*;

class Appli extends JFrame {


JLabel zone1;
public Appli() {
zone1 = new JLabel("Test de mouse",Jlabel.CENTER);
zone1.addMouseMotionListener(new Ecouteur());
getContentPane().add(zone1); setSize(200,200); setVisible(true);
}
private class Ecouteur implements MouseMotionListener {
private void affiche(MouseEvent e) {
System.out.println("x= "+e.getX()+", y="+e.getY());
` }
public void mouseMoved(MouseEvent e) { System.out.print("Mouvement"); affiche(e); }
public void mouseDragged(MouseEvent e) { System.out.print("Glisser"); affiche(e); }
}
}
public class Ex49 {
public static void main(String[] args) { new Appli(); }
}

Noreddine GHERABI ENSA Khouribga


Les Actions sur le clavier
❚ Interface KeyListener ou classe KeyAdapter
❙ Utilisée pour les actions clavier sur un composant
❙ Le Composant doit pouvoir obtenir le focus avec
setFocusable(true)
❙ Méthodes à définir
❘void keyTyped(KeyEvent e) : touche unicode (ascii) tapée
❘void keyPressed(KeyEvent e) : touche quelconque appuyée
dans le composant
❘void keyRealised(KeyEvent e) : touche quelconque relachée
dans le composant
❙ Principales méthodes de la classe KeyEvent
❘boolean isActionKey()
❘int getKeyChar(), int getKeyCode()

Noreddine GHERABI ENSA Khouribga


Exemple :Un chat local
❚ Taper du texte dans une fenêtre,
❚ Recevoir dans une autre, avec ascenseur

Noreddine GHERABI ENSA Khouribga


Exemple :Un chat local
import javax.swing.*; import java.awt.*; import java.awt.event.*;
public class Ex51 {
private JTextArea texte, copie;
public Ex51() {
// Fenetre principale qui envoie
JFrame frame = new JFrame("Chat");
// Gestion de la sortie de fenetre
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Création du panel de la fenetre principale
JPanel panelprincipal = new JPanel(new BorderLayout());
texte = new JTextArea();
// Partie texte de la Fenetre d’emission
JScrollPane paneltexte = new JScrollPane (texte);
// Bouton de la Fenetre d’emission
JButton button = new JButton("Envoyer");
panelprincipal.add(paneltexte, BorderLayout.CENTER);
panelprincipal.add(button, BorderLayout.SOUTH);
// Gestion de l'appui sur le bouton "Envoyer"
button.addActionListener(new MyActionListener());
frame.getContentPane().add(panelprincipal);

Noreddine GHERABI ENSA Khouribga


Exemple :Un chat local
// Creation de la deuxième fenetre pour la reception
JFrame fenetrecopie = new JFrame("Fenetre de reception");
// Création d'une zone de texte pour le message recu avec edition impossible
copie = new JTextArea(); copie.setEditable(false);
// Creation du panel de la fenetre de reception
JScrollPane panelcopie = new JScrollPane (copie);
fenetrecopie.getContentPane().add(panelcopie);
frame.setSize(200, 200); frame.setLocation(0, 0);
frame.setVisible(true);
fenetrecopie.setSize(200, 200); fenetrecopie.setLocation(400, 0);
fenetrecopie. setVisible(true);
}
private class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
copie.append(texte.getText() + "\n");
// Lecture dans la fenetre d'emission (texte)
texte.setText(""); // et ecriture dans la fenetre de reception
} }
public static void main(String[] args) { new Ex51();}
}

Noreddine GHERABI ENSA Khouribga

Vous aimerez peut-être aussi