Vous êtes sur la page 1sur 19

Les interfaces graphiques JAVA

AWT & SWING


Premire bibliothque graphique JAVA: AWT
Package java.awt Utilisation de code natif Composants limits

Nouvelle bibliothque: SWING


Package javax.swing Plus riche et plus personnalisable Ne remplace pas AWT mais fournit des composants plus performants
2

Hirarchie des composants


Les composants graphiques sont placs dans des conteneurs (Containers):

Les containers
- JWindow JFrame JDialog JFileDialog - JPanel Applet - JTabbedPane - JScrollPane

Composants lmentaires
JLabel JButton JCheckbox JRadioButton JTextField JTextArea ButtonGroup JComboBox JList JScrollBar JMenuBar JPopupMenu
3

Composants complexes

Exercice
Raliser une classe First qui affiche une fentre (JFrame) contenant un bouton (JButton)
Cf. mthodes add et setVisible de JFrame

Composition dune fentre JAVA

Disposition des composants


Chaque conteneur utilise un gestionnaire de placement (Layout) pour la disposition des composants quil contient.

GroupLayout

http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
6

Exemples de dispositions

import java.awt.Container; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JButton; public class GridLayoutDemo{ public static void main(String[] args) { JFrame fen=new JFrame("GridLayoutDemo"); Container tmp = fen.getContentPane(); tmp.setLayout(new GridLayout(3,2)); tmp.add(new JButton("Button 1")); tmp.add(new JButton("Button 2")); tmp.add(new JButton("Button 3")); tmp.add(new JButton("Long-Named Button 4 ")); tmp.add(new JButton("5")); fen.setSize(400,200); fen.setVisible(true); } }

import java.awt.BorderLayout; import java.awt.Container; import javax.swing.JButton; import javax.swing.JFrame; public class BorderLayoutDemo { public static void main(String[] args) { JFrame fenetre=new JFrame("BorderLayoutDemo"); Container tmp = fenetre.getContentPane(); tmp.setLayout(new BorderLayout()); tmp.add(new JButton("Button 1(PAGE_START)"), BorderLayout.NORTH); tmp.add(new JButton("Button 3 (LINE_START)"), BorderLayout.WEST); tmp.add(new JButton("Button 2 (CENTER)"), BorderLayout.CENTER); tmp.add(new JButton("5 (LINE_END)"), BorderLayout.EAST); tmp.add(new JButton("Long-Named Button 4 (PAGE_END)"), BorderLayout.SOUTH); fenetre.setSize(600,400); fenetre.setVisible(true); } }

Etapes classiques
// Cration de la fentre et du container JFrame frame = new JFrame("ExempleSimple"); JPanel panel = new JPanel(); // Dfinition du gestionnaire de placement panel.setLayout(new GridLayout(1,2)); // Cration des composants JLabel label = new JLabel("Entrer votre nom"); JTextField textField = new JTextField("toto"); // Ajout des composants au container panel.add(label); panel.add(textField); // Ajout du container la fentre frame.getContentPane().add(panel); // Affichage de la fentre frame.pack(); frame.setVisible(true);
8

Exercice
Ralisez l'interface suivante :

Fentre de 150x10, JTextField 10 colonnes

Propagation des vnements

L utilisateur ralise une action

Des vnements sont alors gnrs

La Machine Virtuelle reoit tous les vnements

Seuls les vnements couts sont transmis

Source de l vnement

vnements

couteurs

JButton, JTextField

ActionEvent, MouseEvent

ActionListener, MouseListener
10

Un exemple 2 faons de faire


public class AL1 implements ActionListener{ JFrame fenetre = new JFrame(); JButton jaune = new JButton("Jaune"); public void actionPerformed(ActionEvent e){ if (e.getSource()==jaune) System.out.println("jaune"); } public AL1(){ jaune.addActionListener(this); fenetre.getContentPane().add(jaune); fenetre.pack(); fenetre.setVisible(true); } public static void main(String[] args){ new AL1(); } } import java.awt.event.ActionEvent; import java.awt.event.ActionListener;

import javax.swing.JButton; import javax.swing.JFrame;


public class AL2 { JFrame fenetre = new JFrame(); JButton jaune = new JButton("Jaune"); public AL2(){ Ecouteur listen=new Ecouteur(); jaune.addActionListener(listen); fenetre.getContentPane().add(jaune); fenetre.pack(); fenetre.setVisible(true); } public class Ecouteur implements ActionListener{ public void actionPerformed(ActionEvent e){ if (e.getSource()==jaune) System.out.println("jaune"); } } public static void main(String[] args){ new AL2(); } }
11

Les acteurs
Le composant
Indique les vnements qu'il peut gnrer. Button : MouseEvent, ActionEvent, ComponentEvent

L'vnement
Indique l'action que l'utilisateur a gnre. Ex : MouseEvent

Le listener
Il indique le traitement faire sur une catgorie d'vnements MouseListener, ActionListener
12

Exercice : Interaction 1
Mettre en place les interactions :
1 Dclarer le listener qui affiche bonjour sur la console chaque clic sur un des deux boutons 2 Abonner les boutons sur ce listener

* XXListener : classe qui implante le Listener choisi * Abonnement : Utiliser la mthode addXXListener(XXListener objetListener) sur le composant qui doit gnrer l'vnement

13

Exercice : Interaction 2
Mettre en place les interactions :
1 Dclarer un listener qui affiche dans le textfield la valeur du bouton cliqu 2 Abonner les boutons sur ce listener

* XXListener : classe qui implante le listener choisi * Abonnement : Utiliser la mthode addXXListener(XXListener objetListener) sur le composant qui doit gnrer l'vnement

14

Les composants et leurs vnements


Tous les composants gnrent des vnements
Car il hritent de la classe Component qui gnre des vnements

Tous les composants ne gnrent pas tous les vnements


E.g. un bouton ne gnre pas d'vnements de type text

Pour les composants lmentaires, il existe un vnement ActionEvent, qui reprsente l'interaction standard avec l'utilisateur
Click sur bouton ==> ActionEvent DoubleClick sur une liste ==> ActionEvent Click sur un lment de liste ==> ActionEvent <Return> la fin d'une saisie dans un TextField ==> ActionEvent

15

java.util.EventObject java.util.EventListener
S
A

java.awt.AWTEvent
A

java.awt.event ActionListener AdjustmentListener ComponentListener


A

ActionEvent AdujstmentEvent ComponentEvent


A

ComponentAdapter ContainerListener
A

ContainerEvent

ContainerAdapter FocusListener
A

FocusEvent InputEvent
A

FocusAdapter KeyListener
A

KeyEvent

KeyAdapter MouseListener
A

MouseEvent

MouseAdapter MouseMotionListener
A

PaintEvent

MouseMotionAdapter WindowListener
A

WindowEvent

WindowAdapter ItemListener TextListener ItemEvent TextEvent

16

Un petit exercice encore


Raliser un listener qui change la couleur du bouton qui possde le focus (utilisation de java.awt.event.FocusListener)
public void focusGained(FocusEvent e){

}
public void focusLost(FocusEvent e){ }

Modifiez votre classe First afin que tous les boutons soient abonns une instance de votre FocusListener
addFocusListener(<unFocusListener>);

17

Hello World (n)


I) Linvitable HelloWorld 1) dvelopper une fentre HelloWord qui affiche Hello !! dans un label 2) Ajouter un bouton la fentre. Le label affichera Hello (n) o n est le nombre de clics sur le bouton

18

Exercice de synthse
Creer une classe Etudiant
attributs nom, prenom, num etudiant un constructeur donnant des valeurs pour les attributs une mthode toString Tester avec un main que vous commenterez ensuite.

Faire une classe GestionEtudiant, qui


Utilise un objet ArrayList pour stocker des tudiants fournit une methode void ajout(Etudiant etu) qui ajoute un tudiant Fournit une mthode Etudiant find(String nom) qui permet de trouver un tudiant par son nom Tester avec un main que vous commenterez ensuite.

Dvelopper une interface graphique pour ajouter, supprimer, rechercher, afficher un tudiant
Faites une conception de linterface avant de vous lancer dans le code!
19

Vous aimerez peut-être aussi