Title: Les composants Graphiques Atomiques
1Les composants Graphiques Atomiques
- Les Labels (JLabel)
- Zone de texte (JTextFiled)
- Les boutons de commande (Jbutton, JCheckBox, )
- Les listes
- Les menus
2Les Labels (JLabel)
- Servent essentiellement à afficher du texte et
des images (texte dinformation) - La classe utilisée est JLabel
- Constructeurs
- new JLabel("Text")
- new JLabel(ImageIcon)
- new JLabel("Text", ImageIcon, AligHorizotal)
- setForGround(Color)
- setFont(Font)
- New Font(font, style, taille)
3Exemple JLabel
// création de la fenêtre récupération de son
container et mise ajours de //son gestionnaire
demplacement JFrame JPFnew JFrame("fenêtre
sur les Jlabel") Container JCPJPF.getContentPane
() JCP.setLayout(new GridLayout(3,0,10,10)) //cr
éation des images à insérer ImageIcon image1new
ImageIcon("c\\email.gif") ImageIcon image2new
ImageIcon("c\\email.gif") //création des JLabel
selon les trois modèles JLabel textnew
JLabel("courier gras et de taille 15") JLabel
iconnew JLabel(image1,JLabel.LEFT) JLabel
texteETiconnew JLabel("je suis le texte
",image2,JLabel.LEFT) //changement des
caractéristiques de la police du
label1 text.setForeground(Color.BLUE) text.setFon
t(new Font("courier",Font.BOLD,15)) //ajout des
label au container de la fenêtre
affichage JCP.add(text) JCP.add(icon) JCP.add(te
xteETicon) JPF.pack() JPF.show()
4Les zones de texte (1)
- Utilisés généralement pour saisir des
informations destinées au programme - Les zones texte en swing sont assurées par la
hiérarchie suivante
5Zone texte (2) JTextField JPasswordText
- Destinés pour saisir du texte sur une seule ligne
- Constructeurs
- new JTextField(String)
- new JTextField(String,int)
- new JPasswordText(String)
- new JPasswordText(String,int)
- getText() récupère le contenue actuel du
JTextField - setFont(Font)
- setForGround(Color)
Pour JPasswordText utilisez la méthode char
getPassword() et non getText().
6JTextArea
- Utilisé pour afficher ou saisir du texte sur
plusieurs ligne. - Constructeurs
- new JTextArea(String)
- new JTextArea(int ligne, int colonne)
- setFont(Font)
- setForground(Color)
- Par défaut le texte est changeable
- setEditable(false)
7Exemple zone Texte
JLabel label1 new JLabel("JTextField") JTextFie
ld textnew JTextField("texte par
défaut") JLabel label2 new JLabel("JPasswordFiel
d") JPasswordField psTextnew
JPasswordField() JPanel panel1new JPanel(new
GridLayout(2,2)) panel1.setBorder(BorderFactory.c
reateTitledBorder( BorderFactory.createLineBorder(
Color.BLACK,3),"les zones Texte")) panel1.add(lab
el1)panel1.add(text) panel1.add(label2)panel1.a
dd(psText) JTextArea textArea new JTextArea(
"ceci est une JTextArea. " )
textArea.setEditable(false) textArea.setFont(new
Font("Serif", Font.ITALIC, 16))
textArea.setLineWrap(true) textArea.setWrapStyle
Word(true) JPanel panel2new JPanel(new
GridLayout(1,1)) panel2.setBorder(BorderFactory.
createTitledBorder( BorderFactory.createLineBorde
r(Color.BLACK,3),"JTextArea"))
panel2.add(textArea) JCP.add(panel1)JCP.add(pan
el2) JPF.pack() JPF.show()
8Les boutons les JButton
- utilisés pour enregistrer ou réagir au commande
de lutilisateur. - Constructeur
- new JButton()
- New Jbutton(String)
- New Jbutton(Icon)
- New Jbutton(String ,Icon)
- Peut être activé ou désactivé
- Le JButton réagit graphiquement au clic
- Quand il est désactivé, laction clic na aucun
effet - Quelques méthodes
- SetEnable(boolean) // change létat dactivité du
bouton - Set
9Exemple Jbutton
public static void main(String args) //
création de la fenêtre JFrame.setDefaultLookAnd
FeelDecorated(true) JFrame testButtonnew
JFrame ("exemple sur les Jbutton") Container
ctestButton.getContentPane() c.setLayout(new
FlowLayout()) //Création des trois boutons
JButton textnew JButton("je suis un boutton
séléctionnée") text.setDefaultCapable(true)
JButton textETiconnew JButton(
"texte image",new ImageIcon("c/orange.gif"))
JButton textDnew JButton("je suis un boutton
désactivé") // désactiver le bouton
textD.setEnabled(false) // ajouter les boutons
c.add(text)c.add(textETicon)c.add(textD)
testButton.initialisation() testButton.pack()t
estButton.show()
10Les Boutons JCheckBox
- Utilisés pour le choix des options ou des
réponses - Les constructeurs
- new JCheckBox(String,boolean)
- new JCheckBox(Icon,boolean)
- Les deux.
- quelques méthodes
- setSelected(boolean) //sélectionner loption
- Boolean isSelected() // teste létat du bouton
11Exemple JCheckBox
public static void main(String args) //
création de la fenêtre JFrame.setDefaultLookAn
dFeelDecorated(true) JFrame testChecknew
JFrame ("exemple sur les JCheckBox")
Container ctestCheck.getContentPane()
c.setLayout(new FlowLayout()) //Création des
Jcheckbox dans un panel JPanel listchoixnew
JPanel(new GridLayout(0,1,10,10)) JCheckBox
lunnew JCheckBox("Lunettes") JCheckBox
casnew JCheckBox("Casquette") JCheckBox
chaunew JCheckBox("Chaussures")
listchoix.add(lun)listchoix.add(cas)listchoix.ad
d(chau) // création de l'image JLabel
labelimagenew JLabel(new ImageIcon("c\\checkbox.
gif")) // ajout des checkbox et l'image dans
la fenêtre c.add(listchoix)c.add(labelimage) /
/ affichage testCheck.pack()testCheck.show()
12Bouton JRadioButton
- Contrairement au Jcheckbox, utilisé pour le choix
exclusive (homme-femme etc.) - Nécessité de placer les choix dans un objet
contexte ButtonGroup - Constructeur
- Les mêmes que JCheckbox
- Les opérations
- Les mêmes que pour JCheckBox
- ButtonGroup
- Constructeur un seul, pas de paramètre
- Ajouter des JRadioButton add(AbstractButton)
13Exemple JRadioButton
public static void main(String args) //
création de la fenêtre JFrame.setDefaultLookAn
dFeelDecorated(true) JFrame testChecknew
JFrame ( exemple sur les JRadioButton
ButtonGroup") Container ctestCheck.getConte
ntPane() c.setLayout(new FlowLayout())
//Création des boutton de choix JPanel
listchoixnew JPanel(new GridLayout(0,1,10,10))
JRadioButton rosenew JRadioButton("petit
couchon Rose") JRadioButton bleunew
JRadioButton("petit couchon Bleu")
JRadioButton noirnew JRadioButton("petit couchon
Noire") listchoix.add(rose)listchoix.add(bleu
)listchoix.add(noir) //regrouper les
bouttons dans une même contexte ButtonGroup
gbnew ButtonGroup() gb.add(rose)gb.add(bleu)
gb.add(noir) // création de l'image
JLabel labelimagenew JLabel(new
ImageIcon("c\\pig.gif")) // ajout des
checkbox et l'image dans la fenêtre
c.add(listchoix)c.add(labelimage) //
affichage testCheck.pack()testCheck.show()
14Les listes JList
- Utilisés pour présenter à lutilisateur un
ensemble déléments (peuvent être utilisées pour
le choix multiple) - Les éléments peuvent être affichés sur plusieurs
lignes et colonnes - Constructeur
- New JList(Object) //liste immuable
- new JList(Vector) //liste immuable
- new JList(DefaultListModel) //liste changeable
- Par défaut la liste est multi-modale (on peut
sélectionner plusieurs éléments) et verticale.
15JListe (2)
- Changer lorientation de la liste
- setLayoutOrientation(int)
- Trois constantes
- Changer le mode de sélection
- setSelectionMode(int)
- Trois constantes
16JList (3)
- Quelques méthodes
- setModel(ListModel) //changer la liste modèle
- Object getSelectedValue()
- Object getSelectedValues()
- DefaultListModel // constructeur vide
- addElement(Object) //ajouter un élément dans la
liste - int getCapacity() // retourne nombre déléments
- .
- Les ascenseurs
- Ajouter des ascenseur pour permettre de gérer la
taille de la liste. - Class JScrollPane
- Constructeur JScrollPane(Component)
- Il peut être ajouté à une zone JTextArea
- Ajouter lobjet ascenseur à la place de la liste
17Exemple JList
//déclaration de lobjet fenêtre et récupération
de son container .. //création d'un objet
DefaultListModel DefaultListModel lmnew
DefaultListModel() //création d'un objet Jliste
avec comme modèle liste "lm" JList listnew
JList(lm) // ajout des employés dans le modèle
de la liste "lm" lm.addElement(new
Employé("Alan", "Sommerer","Directeur")) lm.addEl
ement(new Employé("Alison","Huml",
"marketing")) lm.addElement(new
Employé("Kathy","Walrath", "comercial")) lm.addEl
ement(new Employé("Lisa","Friendly",
"marketing")) .. JLabel textnew JLabel("Quel
sont vos enployés préféré ?????") //création de
l'assenseur et on fixe sa taille JScrollPane
listScroller new JScrollPane(list) listScroller
.setPreferredSize(new Dimension(250,
80)) text.setForeground(Color.red) //ajout des
deux composants au container de la fenêtre
affichage JCP.add(text) JCP.add(listScroller)
JPF.pack()JPF.show()
18List comboBox
- Une liste ou un élément est sélectionné à la fois
19exemple
20Les menus
- Une manière dorganiser les boutons de commande
et les boutons doptions qui ont un intérêt pour
lapplication. - exemple en image
21Vue global de lAPI menu
22 JMenuBar
- Chaque fenêtre peut comporter un et
- un seul JMenuBar
- Utilisation de la méthode de JFrame
- setJMenuBar(JMenuBar)
- Constructeur new JMenuBar()
- Méthode dajout de menus
- Add(JMenue)
23JMenu
- Constructeurs
- JMenu(String)
- JMenu(String,boolean)
- Ajouter des des éléments
- Add(JMenuItem)
- fichier.addSeparator()// ajoute une ligne de
séparation - Vous pouvez également ajouter des objets de type
JMenu pour les sous-menus
24JMenuItem
- Ressemble à JButton (texte et icon)
- Constructeur JMenuItem(String, Icon)
- Les sous classes possibles
- JRadioButtonMenuItem (regrouper dans des
ButtonGroup) - JCheckBox.
- Le même fonctionnement.
25Exemple testons le tout
//création de la fenêtre //création dun
object JMenuBar JMenuBar menuBar new
JMenuBar() //remplacement de JMenuBar de la
fenêtre par lobjet crée fenêtre.setJMenuBar(m
enuBar) //création du Menu_1 . JMenu
jmenu1 new JMenu("JMenu_1") JMenu jmenu2new
JMenu("JMenu_2") jmenu1.add(new
JMenuItem("JMenuItem_1 sans Icon"))
jmenu1.add(new JMenuItem("JMenuItem_2 avec
Icon",new ImageIcon("c\\...gif")))
jmenu1.addSeparator() jmenu1.add(new
JRadioButtonMenuItem("JRadioButtonMenuItem",true))
jmenu1.addSeparator() jmenu1.add(new
JCheckBoxMenuItem("JCheckBoxMenuItem",true))
jmenu1.addSeparator() JMenu smnew
JMenu("Sous Menu_1") jmenu1.add(sm)
sm.add(new JMenuItem("JMenuItem_1 de Sous
Menu_1")) sm.add(new JMenuItem("JMenuItem_2
de Sous Menu_1")) //ajout des deux Menu à
lobjet "menuBar" menuBar.add(jmenu1)menuBar.
add(jmenu2) fenêtre.pack()fenêtre.show()
- Les menus
- Les élément de tous types et les sous menu.
26Résumons on sait faire!!!!
- Création de fenêtres
- Ajout des composants graphiques dans la fenêtre
- Organisation de la disposition des objets
graphiques - On connaît les objets graphiques pour traiter le
texte, les images, les choix, les listes et les
boutons de commande
Comment associer les actions de lutilisateur sur
linterface graphique pour manipuler les données
de lapplication?????? ? programmation des
interfaces
27Problématique
jean
Gilles
Philipe
Vecteur demployés
Un interpréteur dévènement graphique qui
récupère les données, crée un objet Employé et
lajoute à la liste
28Programmation évènementielle
- Concevoir un programme comme une entité
normalement inactive qui réagit de façon
particulière à chaque événement (prévu) qui
intervient. - Programmer une interface consiste à associer un
traitement à chaque objet Graphique
Tant que NON(Evt) faire Rien Selon que
Evtevt1 action1 Evtevt2 action2
Objet Graphique
evt1
application
stimuli
evt2
29Quest ce quun événement???
- Les événements sont des objets java
- Un évènement graphique peut être
- Un clic
- Un double clic
- Bouger la souris
- Taper du texte
- Fermer une fenêtre .
- Chaque objet graphique est capable de réagir à un
certain type dévènement
30Les événements en java
java.lang.Object
java.util.EventObject
vos événements généraux, (pas forcément
graphiques)
Java.awt.AWTEvent
vos événements graphiques
java.awt.event.ActionEvent
Exemple tous les boutons déclenchent des
ActionEvent
31 méthodes lobjet évènement
- Tous les événement sont des sous class de
EventObject. - Chaque événement porte un certain nombre
dinformation sur son contexte - La classe EventObject maintent un seul méthode
hérité par tous les evènement public Object
getSource() - Elle retourne une référence vers lobjet
graphique responsable de lévénement. - exemple MouseEvent propose deux méthode getX() et
getY() qui retourne les coordonnées du point où
lévénement est arrivé
32Gestion des événements en java modèle par
délégation
Événement
Listener
Source
Un événement est propagé d'une Source vers un
objet Listener (ou écouteur) en invoquant une
méthode du listener et en passant une sous-classe
de EventObject qui définit le type dévénement
qui a été engendré.
33Gestion des événements
- Chaque fois que lutilisateur click sur un bouton
de commande, tape du texte ou bouge la souris.,
un événement survient - Lobjet graphique concerné crée un objet
événement de type dévénement correspondant . - programmer une interface graphique consiste alors
à associer un comportement à chaque événement
appropriés. - JAVA pour chaque type dévénement une
interface Listener est associer. - Tous ce que vous avez à faire cest
dimplémenter les interfaces correspondant aux
événements souhaité.
34Les listeners
- Un objet listener est un objet qui implémente
(remplit le contrat d) une interface spécifique.
- Cette interface (ce contrat) prévoit une ou
plusieurs méthodes qui peuvent être invoquées par
une source dévénements. - Java maintient une liste dinterfaces pour chaque
type dévènement - Chaque Listener reçoit une réplique identique de
lévénement original. - Chaque Listener est composé dun ou plusieurs
méthode - Chaque méthode prend en paramètre un objet
événement approprié.
35Tableau de lAPI Event et Listener
36Exemple ActionListener
- Exemple dune interface prédéfini par java pour
traiter les évènements de type ActionEvent. - package java.awt.event
- import java.util.EventListener
- public interface ActionListener extends
EventListener -
- public void actionPerformed(ActionEvent e)
-
37La source
- Tous les composants graphiques quon a vu.
- L'objet Source émet des événements.
- La source enregistre ses listeners par des
méthodes setltEventTypegtListener ou
addltEventTypegtListener. - Toutes les sources dévénements supportent un
modèle multicast pour lémission plusieurs
listeners peuvent être ajoutés pour une seule
source. - L'API na aucun à priori sur l'ordre dans lequel
les événements sont délivrés.
38 Méthode connue sur composant inconnu
Public Class Explosif implements ActionListener
Public Class Chronometre implements ActionListener
chronometre
Listeners
explosif
actionPerformed(ev)
actionPerformed(ev)
ActionEvent
ActionEvent
On
Le bouton ne voit que des ActionListener
39Résumons
- Les évènement sont traités par des classes qui
implémentent des interfaces XXXListener - Java prévoit une interface XXXListener pour
chaque type dévénement - Limplémentation des interfaces XXXListener
représente le comportement de lapplication en
réponse à lévénement en question. - Les objets des classes implémentant un Listener
doivent être rattachés à lobjet graphique en
question.
40Les étapes
- Une fois vos composants graphiques créés
- il suffit de créer un ou plusieurs objets
Listeners (implémentant le protocole déclarant
une méthode de réaction à un événement) - de les déclarer comme listeners de vos composants
graphiques (addActionListener.. addMouseListener) - et cest tout. )
41Exemple très simple!!!!!!!!!!!
- Écrivez une interface graphique contenant un
bouton de commande - Le bouton de commande contient le chiffre 0
- Programmer le bouton de tel façon que le chiffre
dans le bouton sincrémente à chaque click - Indication utilisez linterface ActionListener
42Solution
- Quel est lévénement quon veux programmer??
Click (souris) - Le Listener ou écouteur de lévénement click est
linterface ActionListener. - Implémenter cette interface implémenter la
méthode actionPerformed
public class EcouteurIncré implements
ActionListener public void
actionPerformed(ActionEvent e) - Rattacher une instance de cette class à lobjet
bouton - MonBouton.addActionListener(EcouteurIncré
)
43Plus précisément
import java.awt.event. import
javax.swing. public class EcouteurIncrémentation
implements ActionListener int i0 public
EcouteurIncrémentation() public void
actionPerformed(ActionEvent e)
System.out.println(""e.toString())
((JButton)e.getSource()).setText("click n
"i)i public class Testincrémentation
public Testincrémentation() public
static void main(String args)
JFrame.setDefaultLookAndFeelDecorated(true)
JFrame fenêtre new JFrame("fenêtre programmé")
fenêtre.setSize(300,100) JPanel pnew
JPanel() JButton incrnew JButton("click
ici") incr.setSize(20,20)
incr.addActionListener(new EcouteurIncrémentation(
)) p.add(incr) fenêtre.getContentPane().add(
BorderLayout.SOUTH,p) fenêtre.show()