interface graphique gui n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Interface graphique- GUI PowerPoint Presentation
Download Presentation
Interface graphique- GUI

Loading in 2 Seconds...

play fullscreen
1 / 116

Interface graphique- GUI - PowerPoint PPT Presentation


  • 170 Views
  • Uploaded on

Interface graphique- GUI. Dans une interface graphique on imbrique généralement trois niveaux d’objets graphiques: Le conteneur principal: permet d’encapsuler toutes les entités des deux autres niveaux (par exemple une fenêtre JFrame)

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Interface graphique- GUI' - dolph


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide2
Dans une interface graphique on imbrique généralement trois niveaux d’objets graphiques:
    • Le conteneur principal: permet d’encapsuler toutes les entités des deux autres niveaux (par exemple une fenêtre JFrame)
    • Un composant-conteneur intermédiaire: aussi un conteneur qui se charge de regrouper en son sein des composants atomiques (par exemple un panneau JPanel)
    • Un composant atomique: appelé aussi widgets. Il s’agit d’éléments de base: boutons, zones de saisie, liste de choix déroulant… Ces composants sont ajoutés dans le conteneur courant en invoquant une méthode add.
comment les implanter en java
Comment les implanter en Java :
  • Package java.awt (Abstract Windowing Toolkit)
  • Package javax.swing
  • Ces packages contiennent tous ce qu’il faut pour créer les objets graphiques et de gérer les événements.
classe jframe
Classe JFrame:

import javax.swing.* ;

class MaFenetre extends JFrame

{ public MaFenetre () // constructeur

{ setTitle ("Ma premiere fenetre") ;

setSize (300, 150) ;

}

}

public class Premfen1

{ public static void main (String args[])

{ JFrame fen = new MaFenetre() ; // créer un cadre

fen.setVisible (true) ; // rendre visible la fenêtre

}

}

slide6
Action sur les caractéristiques d’une fenêtre
    • fen.setBounds(x,y,lg,ht)
      • Le coin supérieur de la fenêtre placé au pixel x,y et de taille lg*ht
    • Fen.setDefaultCloseOperation(JFrame.xxx) méthode qui imposer un comportement lors de la fermeture de la fenêtre
        • JFrame.EXIT_ON_CLOSE: fermer l’application à la fermeture de la fenêtre
        • JFrame.DO_NOTHING_ON_CLOSE: ne rien faire (inhiber l’icône détruire)
slide7
import javax.swing.* ;

class MaFenetre extends JFrame

{ public MaFenetre () // constructeur

{ setTitle ("Ma premiere fenetre") ;

fen.setBounds(500,40,300,150);

}

}

public class Premfen1

{ public static void main (String args[])

{ JFrame fen = new MaFenetre() ; // créer un cadre

fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // cette ligne termine le prog

// quand la fenêtre se ferme

fen.setVisible (true) ; // rendre visible la fenêtre

}

}

placer des widgets dans la fen tre
Placer des widgets dans la fenêtre
  • Création d’un bouton
    • Définir un bouton avec la Classe JButton
    • Ajouter le bouton au contenu de la fenêtre appelé panneau

Accessible via getContentPane() de JFrame

slide10
import javax.swing.* ;

import java.awt.*;

class Fen1Bouton extends JFrame

{ public Fen1Bouton ()

{ JButton monBouton ;

JFrame cadre = new JFrame();

cadre.setTitle ("Premier bouton") ;

cadre.setSize (300, 200) ;

monBouton = new JButton ("ESSAI") ;

cadre.getContentPane().add(monBouton) ;

cadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

cadre.setVisible(true) ;

}

}

public class Bouton1

{ public static void main (String args[])

{ Fen1Bouton fen = new Fen1Bouton() ;

}

}

gestionnaire de mise en forme layout manager
Gestionnaire de mise en forme (layout manager)
  • Gère la disposition des composants dans une fenêtre
  • Il existe plusieurs gestionnaires
      • Par défaut le gestionnaire de classe BorderLayout pour les JFrame
slide13
import javax.swing.* ;

class Fen2Bouton extends JFrame

{ public Fen2Bouton ()

{ JButton monBouton1, monBouton2;

JFrame fen = new JFrame();

fen.setTitle ("deux boutons") ;

fen.setSize (300, 200) ;

monBouton1= new JButton ("1er bouton") ;

monBouton2= new JButton ("2eme bouton") ;

fen.getContentPane().add(monBouton1) ;

fen.getContentPane().add(monBouton2) ;

fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

fen.setVisible(true) ;

}

}

public class Bouton2b

{ public static void main (String args[])

{ Fen2Bouton fen = new Fen2Bouton() ;

}

}

borderlayout
Divise un composant d’arrière plan en cinq régions

Les composants agencés n’obtiennent généralement pas la taille voulue

un composant par région

Ajouter un argument à la méthode add sur la position. Par défaut de paramètres affichage au centre

center

north

south

Borderlayout

east

west

slide16
import javax.swing.* ;

import java.awt.*;

class Fen2Bouton extends JFrame

{ public Fen2Bouton ()

{ JButton monBouton1, monBouton2;

JFrame fen = new JFrame();

fen.setTitle ("deux boutons") ;

fen.setSize (300, 200) ;

monBouton1= new JButton ("1er bouton") ;

monBouton2= new JButton ("2eme bouton") ;

fen.getContentPane().add(BorderLayout.EAST,monBouton1) ;

fen.getContentPane().add(BorderLayout.WEST,monBouton2) ;

fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

fen.setVisible(true) ;

}

}

public class Bouton2

{ public static void main (String args[])

{ Fen2Bouton fen = new Fen2Bouton() ;

}

}

gestionnaire flowlayout
Gestionnaire FlowLayout
  • Se comporte comme un traitement de texte où les mots seraient remplacés par des composants.
  • Taille des composants respectées et ils sont agencés de gauche à droite
  • Gestionnaire par défaut des panneaux
slide19
import javax.swing.* ;

import java.awt.*;

class Fen2Bouton extends JFrame

{ public Fen2Bouton ()

{ JButton monBouton1, monBouton2;

JFrame fen = new JFrame();

fen.setTitle ("deux boutons") ;

fen.setSize (300, 200) ;

monBouton1= new JButton ("1er bouton") ;

monBouton2= new JButton ("2eme bouton") ;

fen.setLayout(new FlowLayout());

fen.getContentPane().add(monBouton1) ;

fen.getContentPane().add(monBouton2) ;

fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

fen.setVisible(true) ;

}

}

public class Bouton2c

{ public static void main (String args[])

{ Fen2Bouton fen = new Fen2Bouton() ;

}

}

un panneau dans une fen tre des boutons dans un panneau
Un panneau dans une fenêtre: des boutons dans un panneau

import javax.swing.* ;

import java.awt.*;

class Fen2Bouton extends JFrame

{ public Fen2Bouton ()

{ JButton monBouton1, monBouton2;

JFrame fen = new JFrame();

JPanel panneau = new JPanel(); // création du panneau

panneau.setBackground(Color.darkGray); // couleur de fond gris foncé

monBouton1= new JButton ("1er bouton") ;

monBouton2= new JButton ("2eme bouton") ;

panneau.add(monBouton1) ; // on ajoute le bouton au panneau

panneau.add(monBouton2) ;

fen.getContentPane().add(BorderLayout.EAST,panneau) ; // ajouter le panneau à la fenêtre

fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

fen.setSize (300, 200) ;

fen.setVisible(true) ;

}

}

public class Bouton2e

{ public static void main (String args[])

{ Fen2Bouton fen = new Fen2Bouton() ;

}

gestionnaire boxlayout
Gestionnaire BoxLayout
  • Ressemble à FlowLayout: chaque composant a sa propre taille et ils sont placés dans l’ordre où ils ont été ajoutés
  • Peut empiler les composants verticalement
slide24
import javax.swing.* ;

import java.awt.*;

class Fen2Bouton extends JFrame

{ public Fen2Bouton ()

{ JButton monBouton1, monBouton2;

JFrame fen = new JFrame();

JPanel panneau = new JPanel();

panneau.setBackground(Color.darkGray);

panneau.setLayout(new BoxLayout(panneau, BoxLayout.Y_AXIS)); // changement du Layout

// Y_AXIS pour empilement vertical

monBouton1= new JButton ("1er bouton") ;

monBouton2= new JButton ("2eme bouton") ;

panneau.add(monBouton1) ; // on ajoute le bouton au panneau

panneau.add(monBouton2) ;

fen.getContentPane().add(BorderLayout.EAST,panneau) ; // ajouter le panneau à la fenêtre

fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

fen.setSize (300, 200) ;

fen.setVisible(true) ;

}

}

public class Bouton2f

{ public static void main (String args[])

{ Fen2Bouton fen = new Fen2Bouton() ;

}

}

gestion des v nements exemple du clic bouton
Gestion des événements: exemple du clic bouton
  • Objectif
    • quand l’utilisateur clique nous voulons le savoir
    • Nous nous intéressons à un événement: l’action de l’utilisateur sur le bouton
slide27

Le bouton doit savoir que nous voulons savoir

1

Objet bouton

Votre code

Le bouton doit avoir un moyen de nous rappeler

quand l’événement se produit

2

slide28
Si un événement nous intéressent:
    • Implémenter une interface auditeur qui fait le pont entre l’auditeur (vous) et la source d’événement (le bouton ici)
  • Quand on implémente une interface auditeur:
    • on fournit au bouton le moyen de vous rappeler
    • on déclare la méthode de rappel
comment l utilisateur et la source communique
Comment l’utilisateur et la source communique

Bouton.addActionListener(this)

1

actionPerformed(unEvt)

2

demander au bouton de nous ajouter dans sa liste d’auditeur et d’appeler

la méthode actionPerformed() quand l’utilisateur clique

1

Puisque vous faites parti de mes actionlistener j’appele la méthode

actionPerformed() que je sais que vous avez

2

slide30
Une source d’événement comme un bouton crée un objet événement
  • Dans le package java.awt.event fournit un paquet de classe d’événement facile à repérer (finissent tous par Event).
    • MouseEvent, KeyEvent, ActionEvent…
slide31
import javax.swing.* ;

import java.awt.event.*;

class Fen1Bouton extends JFrame implements ActionListener {

JButton monBouton ;

public Fen1Bouton ()

{

JFrame cadre = new JFrame();

cadre.setTitle ("Gestion du clic") ;

cadre.setSize (300, 200) ;

monBouton = new JButton ("Cliquez-moi") ;

monBouton.addActionListener(this); // s’ajouter à la liste des auditeurs

cadre.getContentPane().add(monBouton) ;

cadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

cadre.setVisible(true) ;

}

public void actionPerformed(ActionEvent event) {

monBouton.setText("j'ai été cliqué!"); // bouton appelle cette méthode qd l’evt se produit

}

}

public class Bouton_action {

public static void main (String args[]) {

Fen1Bouton fen = new Fen1Bouton() ;

}

}

slide32

Après

Avant

auditeurs sources et v nements
Auditeurs, sources et événements
  • Auditeur reçoit l’événement
    • Son rôle consiste à implémenter l’interface
    • S’enregistrer auprès du bouton et fournir la gestion de l’événement
  • La source envoie l’ événement
    • Son rôle consiste à accepter les enregistrements (des auditeurs), recevoir les événements de l’utilisateur et appeler la méthode de gestion de l’événement de l’auditeur
  • L’objet Event contient les données sur l’événement
    • Transporte les données concernant l’événement à l’auditeur
gestion de plusieurs composants
Gestion de plusieurs composants
  • Plusieurs possibilités
    • Tous les composants déclenchent la même réponse (ex plusieurs boutons)
      • Méthode getSource

Public void actionPerformed(ActionEvent event)

if (event.getSource() == bouton1) {…}

else if (event.getSource() == bouton2) {…}

    • Ça marche mais pas très OO
dans le cas g n ral
Dans le cas général
  • Il faut définir plusieurs classes xxxListener
    • On fait appel au concept de sous classe (vu au cours précédent)
slide36

public class Bouton2_action

{ public static void main (String args[])

{ Fen2Bouton fen = new Fen2Bouton() ;

}

}

import javax.swing.* ;

import java.awt.*;

import java.awt.event.*;

class Fen2Bouton extends JFrame {

JButton monBouton1, monBouton2;

public Fen2Bouton () {

JFrame fen = new JFrame();

JPanel panneau = new JPanel();

fen.setTitle ("deux boutons") ;

fen.setSize (300, 200) ;

monBouton1= new JButton ("1er bouton") ;

monBouton1.addActionListener(new TexteListener_bout1());

monBouton2= new JButton ("2eme bouton") ;

monBouton2.addActionListener(new TexteListener_bout2());

fen.setLayout(new FlowLayout());

fen.getContentPane().add(monBouton1) ;

fen.getContentPane().add(monBouton2) ;

fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

fen.setVisible(true) ;

}

class TexteListener_bout1 implements ActionListener {

public void actionPerformed(ActionEvent Event) {

monBouton1.setText("j'ai été cliqué moi le bouton 1!");

}

}

class TexteListener_bout2 implements ActionListener {

public void actionPerformed(ActionEvent Event) {

monBouton2.setText("j'ai été cliqué moi le bouton 2!");

}

}

}

les sous-classes

qui implémente

ActionListener

ajout d un clic souris
Ajout d’un clic souris

Code à rajouter dans le prog précèdent

class Fen2Bouton extends JFrame {

fen.addMouseListener(new EcouteurSouris());

class EcouteurSouris implements MouseListener {

public void mouseClicked (MouseEvent ev) {

int x = ev.getX();

int y = ev.getY();

System.out.println("Clic au point de coordonnées" +x+"," +y);

}

public void mousePressed (MouseEvent ev) {}

public void mouseReleased (MouseEvent ev) {}

public void mouseEntered (MouseEvent ev) {}

public void mouseExited(MouseEvent ev) {}

}

cr er sa propre widget de dessin
Créer sa propre widget de dessin
  • Tout le code graphique sera placé dans une méthode appelé paintComponent()
    • Cette méthode est appelé par le système et l’utilisateur n’appellera jamais cette méthode
    • Créer une sous-classe de JPanel et redéfinissez une seule méthode paintComponent
    • A chaque fois que l’écran aura besoin d’être rafraichi la méthode paintComponent sera appelé
      • Un appel à la méthode repaint() également
slide41
import javax.swing.* ;

import java.awt.*;

class Panneau extends JPanel {

public void paintComponent(Graphics g) {

g.setColor(Color.orange);

g.fillRect(20,50,100,100);

}

}

class Fen1Bouton extends JFrame {

private JPanel pan;

public Fen1Bouton () {

JFrame cadre = new JFrame();

cadre.setSize (300, 200) ;

Panneau pan = new Panneau();

cadre.getContentPane().add(pan) ;

cadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

cadre.setVisible(true) ;

}

}

public class Dessin1 {

public static void main (String args[])

{ Fen1Bouton fen = new Fen1Bouton() ;

}

}

ins rer une image
Insérer une image

class Panneau extends JPanel

{

public void paintComponent(Graphics g) {

Image image = new ImageIcon("chat.jpg").getImage();

g.drawImage(image,3,4,this);

}

}

slide45
Exemple de méthode qu’on peut appeler sur une référence Graphics
      • drawImage(), drawLine(), drawPolygon(), drawRect(), drawoval(), fillRect(), setColor()…
    • Méthode avec Graphics2D (classe mère)
      • fill3DRect(), rotate(),shear(),scale()…
      • Par les vertus du polymorphisme passage d’un contexte à l’autre: Graphics g2d = (Graphics2D g);
slide47
Exo1:
    • Faire une interface qui modifie la couleur d’un cercle à chaque fois qu’on actionne un bouton « changer couleur »
  • Exo2: écrire une interface qui produit un rectangle bleu qui rétrécit et finit par disparaître
slide48
Exo: l’objectif est de réaliser un mini-calculatrice qui est doté d’une addition et d’une multiplication ainsi que d’un bouton pour effacer.
slide49
Gestionnaire GridLayout
    • Permet de disposer les différents composants suivant une grille régulière chaque composant occupant une cellule
      • Ex: conteneur.setLayout(new GridLayout(4,5)); // 4 lignes, 5 colonnes
      • conteneur.setLayout(new GridLayout(4,5,15,10)); // intervalle horizontale de 15 et verticale de 10
quelques composants swing
Quelques composants swing
  • JTextField
    • Constructeurs
      • JTextField champ = new JTextField(20) // crée un champ de 20 colonnes
    • Utilisation
      • Y placer du texte champ.setText(‘’Bonjour’’);
      • Y extraire du texte System.out.println(champ.getText());
      • Recevoir un ActionEvent quand l’utilisateur appuie sur la touche entrée
        • Champ.addActionListener(myActionListener)
slide51
class Fen2Bouton extends JFrame {

JTextField copie;

JFrame fen = new JFrame();

public Fen2Bouton () {

int i;

copie = new JTextField("Bonjour",50);

fen.getContentPane().add(BorderLayout.NORTH,copie) ;

fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

fen.setSize (180, 210) ;

fen.setVisible(true) ;

}

}

public class Jfield

{ public static void main (String args[])

{ Fen2Bouton fen = new Fen2Bouton() ;

}

}

cases cocher et boutons radio
Cases à cocher et boutons radio
  • Cases à cocher: permet à l’utilisateur d’effectuer un choix de type oui/non
  • Boutons radio: même principe mais fait partie d’un groupe de boutons dans lequel une seule option peut être sélectionnée à la fois
cases cocher
Cases cocher
  • Classe JCheckBox
    • Constructeur: JCheckBox coche = new JCheckBox(‘’CASE’’);
      • Initialisation JCheckBox(‘’CASE’’, true);
    • Evénements
      • Action: Interface ActionListener
        • Méthode actionPerformed
      • Item: ItemListener
        • itemStateChange
slide54
class FenCoches extends JFrame implements ActionListener {

public FenCoches () {

setTitle ("Exemple de cases a 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 ("ETAT") ;

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 ("ETAT CASES : " + coche1.isSelected() + " " + coche2.isSelected()) ;

}

private JCheckBox coche1, coche2 ;

private JButton etat ;

}

slide55

Etats CASES: false true

Etats CASES: true true

bouton radio
Bouton radio
  • Constructeur: classe JRadioButton
  • Les choix s’exclue mutuellement
    • Créer un objet de type ButtonGroup
  • Evénements:
    • Action
    • Item
      • La sélection d’un nouveau bouton radio provoque un evt Action ainsi q’un evt Item pour chacun des deux boutons dont l’état à changer
slide57
class FenCoches extends JFrame

implements ActionListener, ItemListener

{ FenCoches ()

{ setTitle ("Exemple de boutons radio") ;

setSize (400, 100) ;

Container contenu = getContentPane() ;

contenu.setLayout (new FlowLayout()) ;

ButtonGroup groupe = new ButtonGroup() ;

radio1 = new JRadioButton ("Radio 1", true) ;

groupe.add(radio1) ;

contenu.add(radio1) ;

radio1.addItemListener (this) ;

radio1.addActionListener (this) ;

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 ("ETAT") ;

contenu.add(etat) ;

etat.addActionListener (this) ;

}

slide58
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 ("ETAT 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 ;

}

etiquettes
Etiquettes
  • Composant JLabel permet d’afficher du texte dans un conteneur non modifiable par l’utilisateur mais que le programme peut faire évoluer
slide61
class FenLabel extends JFrame implements ActionListener

{ public FenLabel ()

{ setTitle ("Essais Labels") ;

setSize (300, 120) ;

Container contenu = getContentPane() ;

contenu.setLayout (new FlowLayout() ) ;

bouton = new JButton ("COMPTEUR") ;

bouton.addActionListener (this) ;

contenu.add(bouton) ;

titre = new JLabel ("nombre de clics sur COMPTEUR = ") ;

contenu.add(titre) ;

nbClics = 0 ;

compte = new JLabel (""+nbClics) ;

contenu.add(compte) ;

}

public void actionPerformed (ActionEvent e)

{ nbClics++ ;

compte.setText(""+nbClics) ;

}

private JButton bouton ;

private JLabel titre, compte ;

private int nbClics ;

}

boites liste et combo
Boites à liste et combo
  • Boites à listes: permet de choisir un ou plusieurs valeurs dans une liste prédéfinie
  • Une boite combo une boite à liste à sélection simple mais avec des facilités d’évolution dynamique
slide64
Composant JList
    • String couleurs ={‘’rouge’’, ‘’bleu’’, ‘’gris’’,’’vert’’,’’jaune’’,’’noir ’’};
    • JList liste = new JList(couleurs);
    • Par défaut sélection d’un nombre quelconque de plages de valeurs
slide65
Méthodes:
    • setSelectedIndex(2) // sélection préalable de l’élément de rang 2
    • getSelectedValue() // fournit la liste des valeurs séléctionnées
      • Cast objet à string
  • Evénement:
    • ListSelection de l’interface ListeSelectionListener
slide66
class FenList extends JFrame implements ListSelectionListener

{ public FenList ()

{ 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()) // on est pas en phase de transition évite la redondance

{ 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 ;

}

boite combo
Boite combo
  • Même construction que la liste
    • JComboBox = new JComBox(couleurs)
  • Ex méthodes
    • setEditable(true/false) // rend le texte éditable
    • setMaximumRowCount(4) // au maximum 4 valeurs affichés
    • setSelectedIndex(2) // sélection préalable de l’elt de rang 2
slide69
getSelectedItem // accès à l’info séléctionnée de type object
  • Evts
    • Action
    • Item: ici méthode itemStateChanged
slide70
class FenCombo extends JFrame implements ActionListener, ItemListener

{ public FenCombo()

{ setTitle ("Essais boite combinée") ;

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 ;

}

evolution dynamique de la liste combo
Evolution dynamique de la liste combo
  • Méthodes:
    • addItem(’’orange’’): ajoute orange à la liste
    • addItemAt(’’rose’’,2): ajoute rose pos 2
slide72
class FenCombo extends JFrame implements ActionListener

{ public FenCombo()

{ 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 ;

}

boite de dialogue
Boite de dialogue
  • Création de l’objet boite de dialogue
  • Affichage
  • Gestion du dialogue avec l’utilisateur
  • Fermeture de la boite de dialogue
  • Transfert éventuel d’information
  • Remarque: rendre visible ou invisible une boite de dialogue ne libère pas les objets
    • Méthode dispose s’il faut libérer de la mémoire
slide75
Classe JOptionPane
    • Méthodes
      • showMessageDialog
      • showConfirmDialog
      • showInputDialog
  • Fenêtre devient invisible après le choix de l’utilisateur
slide76
import javax.swing.* ;

class MaFenetre extends JFrame

{ MaFenetre ()

{ setTitle ("Essai message") ;

setSize (400, 150) ;

}

}

public class Mess1

{ public static void main (String args[])

{ MaFenetre fen = new MaFenetre() ;

fen.setVisible(true) ;

System.out.println ("avant message") ;

JOptionPane.showMessageDialog(fen, "Hello");

System.out.println ("apres message") ;

}

}

confirmdialog l utilisateur donne un choix
ConfirmDialog:l’utilisateur donne un choix

import javax.swing.* ;

public class Confirm1

{ public static void main (String args[])

{ while (true)

{ int rep = JOptionPane.showConfirmDialog(null, "voulez-vous continuer") ;

System.out.println ("reponse : " + rep) ;

}

}

}

slide79
Clic oui: réponse 0

Clic non: 1

Clic annuler 2

Clic sur le bouton X: -1

boite de saisie inputdialog
Boite de saisie: InputDialog

import javax.swing.* ;

public class Input1

{ public static void main (String args[])

{ String txt ;

while (true)

{ txt = JOptionPane.showInputDialog (null, "donnez un texte") ;

if (txt == null) System.out.println ("pas de texte saisi") ;

else System.out.println ("texte saisi :" + txt + ": de longueur " + txt.length()) ;

}

}

}

slide82
class FenInput extends JFrame implements ActionListener

{ String[] couleurs = { "rouge", "vert", "bleu", "jaune", "orange", "blanc"} ;

public FenInput ()

{ setTitle ("Essai options") ;

setSize (400, 220) ;

JButton saisie = new JButton ("CHOIX") ;

getContentPane().add(saisie, "South") ;

saisie.addActionListener (this) ;

}

public void actionPerformed (ActionEvent e)

{ System.out.println ("** affichage boite d'options") ;

String txt = (String)JOptionPane.showInputDialog (this,

"choisissez une couleur", "BOITE D'OPTIONS",

JOptionPane.QUESTION_MESSAGE, null, couleurs, couleurs[1]) ;

if (txt == null) System.out.println (" pas de choix effectue") ;

else System.out.println (" option choisie :" + txt) ;

}

}

JOptionPane.QUESTION_MESSAGE: modifier les propriétés du message

null: pas de fenêtre parente

boite de dialogue personnalis es showinputdialog
Boite de dialogue personnalisées: showInputDialog
  • Constructeur
    • JDialog bd = new JDialog (fen, ’’ma boite de dialogue’’,true);
    • Fen: fenêtre parent
    • Titre: ma boite de dialogue
    • Modalité: true/false
      • Agir sur d’autres composants tant que le dialogue n’est pas fini
slide85
Le contenu est géré par le programmeur
    • Ajout de bouton
    • Ajout de champ texte
slide86
class FenDialog extends JFrame implements ActionListener

{ public FenDialog ()

{ setTitle ("Essai boite de dialogue") ;

setSize (400, 200) ;

lanceDial = new JButton ("Lancement dialogue") ;

Container contenu = getContentPane() ;

contenu.setLayout(new FlowLayout()) ;

contenu.add (lanceDial) ;

lanceDial.addActionListener(this) ;

}

public void actionPerformed (ActionEvent e)

{ MonDialog bd = new MonDialog(this) ;

texte = bd.lanceDialogue () ;

if (texte != null) System.out.println ("valeur lue : " + texte) ;

else System.out.println ("dialogue abandonne") ;

bd.dispose() ;

}

private JButton lanceDial ;

private String texte ;

}

class MonDialog extends JDialog implements ActionListener

{ public MonDialog (JFrame proprio)

{ super (proprio, "Dialogue de saisie", true) ;

setSize (250, 120) ;

okBouton = new JButton ("OK") ;

okBouton.addActionListener (this) ;

champTexte = new JTextField (20) ;

Container contenu = getContentPane() ;

contenu.setLayout (new FlowLayout()) ;

contenu.add(okBouton) ;

contenu.add(champTexte) ;

}

public void actionPerformed (ActionEvent e)

{ if (e.getSource() == okBouton)

{ ok = true ;

setVisible (false) ;

}

}

public String lanceDialogue()

{ ok = false ;

setVisible (true) ;

if (ok) return champTexte.getText() ;

else return null ;

}

private boolean ok ;

private JButton okBouton ;

private JTextField champTexte ;

}

slide88
Exemple d’application
    • Figure avec boite de dialogue (prog ExDial)
menus d roulants
Menus déroulants
  • Créer une barre de menus
  • Faire apparaître à un moment donné un menu surgissant
slide90
Création:
    • Un objet JMenuBar:
      • Création d’un objet barre:
        • JMenuBar barreMenus = new JMenuBar();
      • Rattaché le menu à la fenetre
        • Fen.setJMenuBar(barreMenus);
    • Différents objets menu JMenu visibles dans la barre des menus
      • JMenu couleur = new JMenu(’’Couleur’’);
      • barreMenus.add(couleur);
    • Pour chaque menu création des différents options de type JMenuItem
      • JMenuItem rouge = new JMenuItem(’’Rouge’’);
      • Couleur.add(rouge);
slide91
class FenMenu extends JFrame implements ActionListener

{ public FenMenu ()

{ setTitle ("Exemple de menu") ;

setSize (300, 150) ;

/* creation barre des menus */

barreMenus = new JMenuBar() ;

setJMenuBar(barreMenus) ;

/* creation menu Couleur et ses options Rouge et Vert */

couleur = new JMenu ("Couleur") ;

barreMenus.add(couleur) ;

rouge = new JMenuItem ("Rouge") ;

couleur.add(rouge) ;

rouge.addActionListener (this) ;

vert = new JMenuItem ("Vert") ;

couleur.add(vert) ;

vert.addActionListener (this) ;

dimensions = new JMenu ("Dimensions") ; /* creation menu Dimensions et ses options Hauteur et Largeur */

barreMenus.add(dimensions) ;

largeur = new JMenuItem ("Largeur") ;

dimensions.add(largeur) ;

largeur.addActionListener (this) ;

hauteur = new JMenuItem ("Hauteur") ;

dimensions.add(hauteur) ;

hauteur.addActionListener (this) ;

}

public void actionPerformed (ActionEvent e)

{ Object source = e.getSource() ;

System.out.println ("Action avec chaine de commande = "

+ e.getActionCommand() ) ;

if (source == rouge) System.out.println ("** Action option rouge") ;

if (source == vert) System.out.println ("** Action option vert") ;

if (source == largeur) System.out.println ("** Action option largeur") ;

if (source == hauteur) System.out.println ("** Action option hauteur") ;

}

private JMenuBar barreMenus ;

private JMenu couleur, dimensions ;

private JMenuItem rouge, vert, largeur, hauteur ;

}

slide93
On peut rajouter dans les menus déroulants:
    • Boutons radio du type JRadioButtonItem
    • Options case à cocher JCheckBoxMenuItem
slide94
class FenMenu extends JFrame implements ActionListener, ItemListener

{ public FenMenu ()

{ setTitle ("Exemple de menu") ;

setSize (300, 150) ;

/* creation barre des menus */

barreMenus = new JMenuBar() ;

setJMenuBar(barreMenus) ;

/* creation menu Couleur et son groupe de 2 boutons radio : Rouge et Vert */

couleur = new JMenu ("Couleur") ;

barreMenus.add(couleur) ;

rouge = new JRadioButtonMenuItem ("Rouge") ;

couleur.add(rouge) ;

rouge.addActionListener (this) ;

rouge.addItemListener (this) ;

vert = new JRadioButtonMenuItem ("Vert") ;

couleur.add(vert) ;

vert.addActionListener (this) ;

vert.addItemListener (this) ;

ButtonGroup groupe = new ButtonGroup() ;

groupe.add(rouge) ;

groupe.add(vert) ;

/* creation menu Dimensions et ses cases a cocher Hauteur et Largeur */

formes = new JMenu ("Formes") ;

barreMenus.add(formes) ;

rectangle = new JCheckBoxMenuItem ("Rectangle") ;

formes.add(rectangle) ;

rectangle.addActionListener (this) ;

rectangle.addItemListener (this) ;

ovale = new JCheckBoxMenuItem ("Ovale") ;

formes.add(ovale) ;

ovale.addActionListener (this) ;

ovale.addItemListener (this) ;

}

slide95
public void actionPerformed (ActionEvent e)

{ Object source = e.getSource() ;

if (source == rouge) System.out.println ("** Action option rouge") ;

if (source == vert) System.out.println ("** Action option vert") ;

if (source == rectangle) System.out.println ("** Action option rectangle") ;

if (source == ovale) System.out.println ("** Action option ovale") ;

}

public void itemStateChanged (ItemEvent e)

{ Object source = e.getSource() ;

if (source == rouge) System.out.println ("** Item option rouge") ;

if (source == vert) System.out.println ("** Item option vert") ;

if (source == rectangle) System.out.println ("** Item option rectangle") ;

if (source == ovale) System.out.println ("** Item option ovale") ;

System.out.print ("Options selectionnees : ") ;

if (rouge.isSelected()) System.out.print (" rouge") ;

if (vert.isSelected()) System.out.print (" vert") ;

if (rectangle.isSelected()) System.out.print (" rectangle") ;

if (ovale.isSelected()) System.out.print (" ovale") ;

System.out.println() ;

}

private JMenuBar barreMenus ;

private JMenu couleur, formes ;

private JRadioButtonMenuItem rouge, vert ;

private JCheckBoxMenuItem rectangle, ovale ;

}

public class Menu2

{ public static void main (String args[])

{ FenMenu fen = new FenMenu() ;

fen.setVisible(true) ;

}

}

menu surgissant
Menu surgissant
  • Création d’un objet JPopupMenu
    • Rattacher un objet de type JMenuItem
  • Menu affiché explicitement par le programme en utilisant la méthode show de la classe JPopupMenu
    • Affiché généralement par le clic bouton droit de la souris
      • Utilisation de la classe MouseEvent qui dispose d’une méthode isPopupTrigger
        • Fournit la valeur true si le bouton concerné est actionné
slide98
class FenMenu extends JFrame implements ActionListener // Exo popup1

{ public FenMenu ()

{ setTitle ("Exemple de menu surgissant") ;

setSize (400, 120) ;

/* creation menu surgissant Couleur et ses options Rouge et Vert */

couleur = new JPopupMenu () ;

rouge = new JMenuItem ("Rouge") ;

couleur.add(rouge) ;

rouge.addActionListener (this) ;

vert = new JMenuItem ("Vert") ;

couleur.add(vert) ;

vert.addActionListener (this) ;

addMouseListener (new MouseAdapter()

{ public void mouseReleased (MouseEvent e)

{ if (e.isPopupTrigger())

couleur.show (e.getComponent(), e.getX(), e.getY()) ; // classe anonyme

} // on aurait pu passer par l’interface MouseListener

} ) ;

}

public void actionPerformed (ActionEvent e)

{ Object source = e.getSource() ;

System.out.println ("Action avec chaine de commande = "

+ e.getActionCommand() ) ;

if (source == rouge) System.out.println ("** Action option rouge") ;

if (source == vert) System.out.println ("** Action option vert") ;

}

private JPopupMenu couleur ;

private JMenuItem rouge, vert ;

}

slide99
Equivalence de l’appel à la classe anonyme

Class EcouteurdeSouris extends MouseAdapter {

public void mouseReleased (MouseEvent e)

{ if (e.isPopupTrigger())

couleur.show (e.getComponent(), e.getX(), e.getY()) ; }

}

Dans le corps du programme

addMouseListener (new EcouteurdeSouris);

composition de menus
Composition de menus
  • On peut définir des sous-menus
    • Pour cela utiliser dans un item d’un menu une option de type JMenu à la place de JMenuItem
slide102
class FenMenu extends JFrame

{ public FenMenu ()

{ setTitle ("Exemple de menus composes") ;

setSize (400, 150) ;

/* creation barre des menus */

barreMenus = new JMenuBar() ;

setJMenuBar(barreMenus) ;

/* creation menu Formes et ses options Arrondi et Rectangle */

formes = new JMenu ("Formes") ;

barreMenus.add(formes) ;

arrondi = new JMenu ("Arrondi") ;

formes.add(arrondi) ;

cercle = new JMenuItem ("Cercle") ;

arrondi.add(cercle) ;

ovale = new JMenuItem ("Ovale") ;

arrondi.add(ovale) ;

rectangle = new JMenuItem ("Rectangle") ;

formes.add(rectangle) ;

}

private JMenuBar barreMenus ;

private JMenu formes, arrondi ;

private JMenuItem cercle, ovale, rectangle ;

}

barre outils
Barre à outils
  • Classe JToolBar
    • On peut y ajouter
      • des boutons
      • des icônes:
        • Ex: bouton = new JButton(new ImageIcon(’’rouge.gif’’));
slide105
class FenOutil extends JFrame implements ActionListener // exo Outil

{ public FenOutil ()

{ setTitle ("Barre d'outils") ;

setSize (300, 100) ;

Container contenu = getContentPane() ;

/* creation barre d'outils couleurs */

barreOutils = new JToolBar () ;

boutonRouge = new JButton ("Rouge") ;

barreOutils.add (boutonRouge) ;

boutonRouge.addActionListener (this) ;

boutonVert = new JButton ("Vert") ;

barreOutils.add (boutonVert) ;

boutonVert.addActionListener (this) ;

contenu.add(barreOutils, "North") ;

}

public void actionPerformed (ActionEvent e)

{ if (e.getSource() == boutonRouge) System.out.println ("action rouge") ;

if (e.getSource() == boutonVert) System.out.println ("action vert") ;

}

private JToolBar barreOutils ;

private JButton boutonRouge, boutonVert ;

}

slide107
Exo1: refaire les différents exemples
  • Exo2: l’objectif est de modifier l’application précédente. Il s’agira de supprimer la boite de dialogue et d’insérer:
    • 3 menus: couleur, formes et dimensions
    • une barre d’outils qui contient les couleurs rouge, vert, jaune, bleu
    • un menu surgissant contenant ces couleurs
ev nements li s la souris
Evénements liés à la souris
  • Gestion de l’appui et du relâchement des boutons
  • Identification des boutons
  • Gestion des déplacements de la souris
  • Sélection de zone
slide109
mousePressed
  • mouseReleased
  • mouseClicked: clic complet un pressed et un released
slide110
import javax.swing.* ; //souris1

import java.awt.* ;

import java.awt.event.* ;

class MaFenetre extends JFrame implements MouseListener

{ public MaFenetre ()

{ setTitle ("Traces souris") ;

setSize (300, 180) ;

addMouseListener (this) ;

}

public void mouseClicked (MouseEvent e)

{ System.out.println ("mouseClicked en " + e.getX() + " " + e.getY()) ;

}

public void mousePressed (MouseEvent e)

{ System.out.println ("mousePressed en " + e.getX() + " " + e.getY()) ;

}

public void mouseReleased (MouseEvent e)

{ System.out.println ("mouseReleased en " + e.getX() + " " + e.getY() ) ;

}

public void mouseEntered (MouseEvent e) {}

public void mouseExited (MouseEvent e) {}

}

public class Souris1

{ public static void main (String args[])

{ MaFenetre fen = new MaFenetre() ;

fen.setVisible(true) ;

}

}

identification du bouton et double clics
Identification du bouton et double clics
  • Méthode getModifiers de la classe MouseEvent fournit un entier pour lequel un bit de rang donné est associé à chacun des boutons et prend la valeur 1 pour indiquer l’appui.
    • Pour savoir quel bouton a été appuyer: utilisation de masques prédéfini
        • InputEvent.Button1_Mask (bouton gauche) InputEvent.Button2_Mask, (bouton milieu) InputEvent.Button3_Mask, (bouton droit)
slide112
class MaFenetre extends JFrame implements MouseListener //souris2

{ public MaFenetre ()

{ setTitle ("Traces souris") ;

setSize (300, 180) ;

addMouseListener (this) ;

}

public void mouseClicked (MouseEvent e)

{ details ("mouseClicked ", e) ; }

public void mousePressed (MouseEvent e)

{ details ("mousePressed ", e) ;

}

public void mouseReleased (MouseEvent e)

{ details ("mouseReleased ", e) ;

}

public void mouseEntered (MouseEvent e) {}

public void mouseExited (MouseEvent e) {}

public static void details (String txt, MouseEvent e)

{ System.out.print (txt + e.getX() + " " + e.getY()) ;

System.out.print (" Ctr = " + e.getClickCount()) ;

System.out.print (" Boutons : ") ;

if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0)

System.out.print ("gauche ") ;

if((e.getModifiers() & InputEvent.BUTTON2_MASK) != 0)

System.out.print ("milieu ") ;

if ((e.getModifiers() & InputEvent.BUTTON3_MASK) != 0)

System.out.print ("droite ") ;

if(e.isPopupTrigger()) System.out.print (" Popup ") ;

System.out.println () ;

}

}

gestion des d placements
Gestion des déplacements
  • Java génère un evt:
    • mouseEntered chaque fois que la souris passe de l’extérieur à l’intérieur d’un composant
    • mouseExited déplacement inverse
    • mouseMouved quand la souris est déplacé sur un composant donné sans appuyer sur un bouton
    • mouseDragged si le bouton reste enfoncé pendant le déplacement
  • mouseMouved et mouseDragged appartiennent à l’interface MouseMotionListener
slide114
class MaFenetre extends JFrame implements MouseListener, MouseMotionListener // souris3

{ public MaFenetre ()

{ setTitle ("Traces souris") ;

setSize (300, 180) ;

addMouseListener (this) ;

addMouseMotionListener (this) ;

}

public void mouseClicked (MouseEvent e)

{ details ("mouseClicked ", e) ; }

public void mousePressed (MouseEvent e)

{ details ("mousePressed ", e) ;

}

public void mouseReleased (MouseEvent e)

{ details ("mouseReleased ", e) ;

}

public void mouseEntered (MouseEvent e)

{ details ("mouseEntered ", e) ;

}

public void mouseExited (MouseEvent e)

{ details ("mouseExited ", e) ;

}

public void mouseMoved (MouseEvent e)

{ details ("mouseMoved ", e) ;

}

public void mouseDragged (MouseEvent e)

{ details ("mouseDragged ", e) ;

}

public void details (String txt, MouseEvent e)

{ System.out.print (txt + e.getX() + " " + e.getY()) ;

System.out.print (" Ctr = " + e.getClickCount()) ; System.out.print (" Boutons : ") ;

if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0 System.out.print ("gauche ") ;

if((e.getModifiers() & InputEvent.BUTTON2_MASK) != 0) System.out.print ("milieu ") ;

if ((e.getModifiers() & InputEvent.BUTTON3_MASK) != 0) System.out.print ("droite ") ;

if(e.isPopupTrigger()) System.out.print (" Popup ") ;

System.out.println () ;

}

}

s lection
Sélection

class MaFenetre extends JFrame //drag1

{ MaFenetre ()

{ setTitle ("Essais drag souris") ;

setSize (300, 200) ;

paneau = new Paneau() ;

getContentPane().add(paneau) ;

}

private JPanel paneau ;

}

class Paneau extends JPanel implements MouseMotionListener

{ Paneau()

{ addMouseMotionListener(this) ;

addMouseListener (new MouseAdapter()

{ public void mouseReleased (MouseEvent e)

{ enCours = false ;

System.out.println ("Release "+e.getX() + " " + e.getY());

} }) ;

}

slide116
public void mouseDragged (MouseEvent e)

{ System.out.println ("Drag "+e.getX() + " " + e.getY());

if (!enCours) { xDeb = e.getX() ; yDeb = e.getY() ; xFin = xDeb ; yFin = yDeb ;

enCours = true ;

}

else { xFin = e.getX() ; yFin = e.getY() ;

}

repaint() ;

}

public void mouseMoved (MouseEvent e) {}

public void paintComponent (Graphics g)

{ super.paintComponent(g) ;

int xd, xf, yd, yf ;

xd = Math.min (xDeb, xFin) ; xf = Math.max (xDeb, xFin) ;

yd = Math.min (yDeb, yFin) ; yf = Math.max (yDeb, yFin) ;

g.drawRect (xd, yd, xf-xd, yf-yd) ;

}

private boolean enCours = false ;

private int xDeb, yDeb, xFin, yFin ;

}