Top Banner
La programmation orient´ ee objets et le langage Java Master BBSG 2 Laurent Tichit epartement Informatique et Interactions, Facult´ e des Sciences de Luminy Cours 6: Interfaces graphiques homme-machine c L. Tichit, 2015-2016 POO et Java 1 / 23
45

Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

Sep 14, 2018

Download

Documents

truongphuc
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

La programmation orientee objetset le langage Java

Master BBSG 2Laurent Tichit

Departement Informatique et Interactions, Faculte des Sciences de Luminy

Cours 6: Interfaces graphiqueshomme-machine

c©L. Tichit, 2015-2016 POO et Java 1 / 23

Page 2: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

L’interface graphique d’une application Java

Bibliotheque JFC (Java Foundation Classes) :

AWT (Abstract Windowing Toolkit)

premiere version, role important dans le succes de Javacomposants lourds, c.-a-d. apparies avec des composants natifspresente dans Swing (evenements, gestionnaires de disposition, etc.)

Swing

composants bien plus nombreux et perfectionnescomposants legers, � 100% pur Java �

en pratique, on utilise

les composants de Swingla gestion des evenements de AWTles gestionnaires de disposition (layout manager) de AWT

Detail : attention aux noms des composants :

AWT : Frame, Button, Panel...Swing : JFrame, JButton, JPanel...

c©L. Tichit, 2015-2016 POO et Java 2 / 23

Page 3: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

L’interface graphique d’une application Java

Bibliotheque JFC (Java Foundation Classes) :

AWT (Abstract Windowing Toolkit)

premiere version, role important dans le succes de Javacomposants lourds, c.-a-d. apparies avec des composants natifspresente dans Swing (evenements, gestionnaires de disposition, etc.)

Swing

composants bien plus nombreux et perfectionnescomposants legers, � 100% pur Java �

en pratique, on utilise

les composants de Swingla gestion des evenements de AWTles gestionnaires de disposition (layout manager) de AWT

Detail : attention aux noms des composants :

AWT : Frame, Button, Panel...Swing : JFrame, JButton, JPanel...

c©L. Tichit, 2015-2016 POO et Java 2 / 23

Page 4: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

L’interface graphique d’une application Java

Bibliotheque JFC (Java Foundation Classes) :

AWT (Abstract Windowing Toolkit)

premiere version, role important dans le succes de Javacomposants lourds, c.-a-d. apparies avec des composants natifspresente dans Swing (evenements, gestionnaires de disposition, etc.)

Swing

composants bien plus nombreux et perfectionnescomposants legers, � 100% pur Java �

en pratique, on utilise

les composants de Swingla gestion des evenements de AWTles gestionnaires de disposition (layout manager) de AWT

Detail : attention aux noms des composants :

AWT : Frame, Button, Panel...Swing : JFrame, JButton, JPanel...

c©L. Tichit, 2015-2016 POO et Java 2 / 23

Page 5: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

L’interface graphique d’une application Java

Bibliotheque JFC (Java Foundation Classes) :

AWT (Abstract Windowing Toolkit)

premiere version, role important dans le succes de Javacomposants lourds, c.-a-d. apparies avec des composants natifspresente dans Swing (evenements, gestionnaires de disposition, etc.)

Swing

composants bien plus nombreux et perfectionnescomposants legers, � 100% pur Java �

en pratique, on utilise

les composants de Swingla gestion des evenements de AWTles gestionnaires de disposition (layout manager) de AWT

Detail : attention aux noms des composants :

AWT : Frame, Button, Panel...Swing : JFrame, JButton, JPanel...

c©L. Tichit, 2015-2016 POO et Java 2 / 23

Page 6: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Le sommet de la hierarchie

classe AWT proprietes essentielles methodes � revelatrices�

Component visible a l’ecran paint

source d’evenements addXXXListener

Container contient d’autres composants add

gere leur placement setLayout

Window existe seul sur l’ecran setVisible

maintient en vie les ressources setOwner

Frame cadre permanent (represente l’application)porte une barre de menus

Dialog boıte de dialogue temporaire, sert a saisir des informationspeut etre modale (bloquante) ou non

c©L. Tichit, 2015-2016 POO et Java 3 / 23

Page 7: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Le sommet de la hierarchie

classe AWT proprietes essentielles methodes � revelatrices�

Component visible a l’ecran paint

source d’evenements addXXXListener

Container contient d’autres composants add

gere leur placement setLayout

Window existe seul sur l’ecran setVisible

maintient en vie les ressources setOwner

Frame cadre permanent (represente l’application)porte une barre de menus

Dialog boıte de dialogue temporaire, sert a saisir des informationspeut etre modale (bloquante) ou non

c©L. Tichit, 2015-2016 POO et Java 3 / 23

Page 8: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Le sommet de la hierarchie

classe AWT proprietes essentielles methodes � revelatrices�

Component visible a l’ecran paint

source d’evenements addXXXListener

Container contient d’autres composants add

gere leur placement setLayout

Window existe seul sur l’ecran setVisible

maintient en vie les ressources setOwner

Frame cadre permanent (represente l’application)porte une barre de menus

Dialog boıte de dialogue temporaire, sert a saisir des informationspeut etre modale (bloquante) ou non

c©L. Tichit, 2015-2016 POO et Java 3 / 23

Page 9: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Le sommet de la hierarchie

classe AWT proprietes essentielles methodes � revelatrices�

Component visible a l’ecran paint

source d’evenements addXXXListener

Container contient d’autres composants add

gere leur placement setLayout

Window existe seul sur l’ecran setVisible

maintient en vie les ressources setOwner

Frame cadre permanent (represente l’application)porte une barre de menus

Dialog boıte de dialogue temporaire, sert a saisir des informationspeut etre modale (bloquante) ou non

c©L. Tichit, 2015-2016 POO et Java 3 / 23

Page 10: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Le sommet de la hierarchie

classe AWT proprietes essentielles methodes � revelatrices�

Component visible a l’ecran paint

source d’evenements addXXXListener

Container contient d’autres composants add

gere leur placement setLayout

Window existe seul sur l’ecran setVisible

maintient en vie les ressources setOwner

Frame cadre permanent (represente l’application)porte une barre de menus

Dialog boıte de dialogue temporaire, sert a saisir des informationspeut etre modale (bloquante) ou non

c©L. Tichit, 2015-2016 POO et Java 3 / 23

Page 11: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

La plus petite application avec IUG

C’est aussi la partie constante, � inevitable�, de toute IUG :

Fichier Simple1.java

import javax.swing.JFrame;

public class Simple1 {public static void main(String[] args) {

JFrame cadre = new JFrame("Simple");cadre.setSize(300, 200);cadre.setVisible(true);

}}

Attention, la case defermeture n’est pasoperationnelle(le cadre disparaıt maisl’application ne se terminepas)

c©L. Tichit, 2015-2016 POO et Java 4 / 23

Page 12: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

La plus petite application avec IUG

C’est aussi la partie constante, � inevitable�, de toute IUG :

Fichier Simple1.java

import javax.swing.JFrame;

public class Simple1 {public static void main(String[] args) {

JFrame cadre = new JFrame("Simple");cadre.setSize(300, 200);cadre.setVisible(true);

}}

Attention, la case defermeture n’est pasoperationnelle(le cadre disparaıt maisl’application ne se terminepas)

c©L. Tichit, 2015-2016 POO et Java 4 / 23

Page 13: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

La plus petite application avec IUG

C’est aussi la partie constante, � inevitable�, de toute IUG :

Fichier Simple1.java

import javax.swing.JFrame;

public class Simple1 {public static void main(String[] args) {

JFrame cadre = new JFrame("Simple");cadre.setSize(300, 200);cadre.setVisible(true);

}}

Attention, la case defermeture n’est pasoperationnelle(le cadre disparaıt maisl’application ne se terminepas)

c©L. Tichit, 2015-2016 POO et Java 4 / 23

Page 14: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

La plus petite application avec IUG

Une maniere expeditive (trop ?) de regler cette affaire de la case de fermeture :

Fichier Simple2.java

import javax.swing.JFrame;

public class Simple2 {public static void main(String[] args) {

JFrame cadre = new JFrame("Simple");cadre.setSize(300, 200);cadre.setDefaultCloseOperation(JFrame.EXIT ON CLOSE);cadre.setVisible(true);

}}

c©L. Tichit, 2015-2016 POO et Java 5 / 23

Page 15: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

La plus petite application avec IUG

Mettons quelque chose dans le cadre (par exemple, un panneau rouge) :

Fichier Simple3.java

import java.awt.*;import javax.swing.*;

public class Simple3 {

public static void main(String[] args) {JFrame cadre = new JFrame("Simple");cadre.setSize(300, 200);cadre.setDefaultCloseOperation(JFrame.EXIT ON CLOSE);

JPanel panneau = new JPanel();panneau.setBackground(Color.red);

cadre.setContentPane(panneau);cadre.setVisible(true);

}}

c©L. Tichit, 2015-2016 POO et Java 6 / 23

Page 16: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

La plus petite application avec IUG

Quelque chose dans le cadre, une autre approche :

Fichier Simple4.java

public class Simple4 extends JPanel {

Simple4() {JLabel label = new JLabel("Bonjour a tous");label.setForeground(Color.white);label.setFont(new Font("Serif", Font.PLAIN, 48));

this.add(label);this.setBackground(Color.red);

}

public static void main(String[] args) {JFrame cadre = new JFrame("Simple");cadre.setSize(300, 200);cadre.setDefaultCloseOperation(JFrame.EXIT ON CLOSE);cadre.setContentPane(new Simple4());cadre.setVisible(true);

}}

c©L. Tichit, 2015-2016 POO et Java 7 / 23

Page 17: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Le mecanisme des evenements

objets auditeurspossèdent les méthodes correspondantaux événements dont ils sont auditeurs

composantsource

l'utilisateur agit sur un composant

auparavant, les auditeurs ont été enregistrés auprès de la source (abonnement)

la source crée un événement et le notifie aux auditeurs

c©L. Tichit, 2015-2016 POO et Java 8 / 23

Page 18: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Le mecanisme des evenements

Exemple : les evenements � souris �

sont notifies par les methodes, signalant diverses actions de l’utilisateur :

void mousePressed(MouseEvent evt);

void mouseReleased(MouseEvent evt);

void mouseClicked(MouseEvent evt);

void mouseEntered(MouseEvent evt);

void mouseExited(MouseEvent evt);

comment garantir qu’un candidat auditeur les possede ?

⇒ on en fait une interface : interface MouseListener

un auditeur d’evenements souris � s’enregistre � aupres d’une source de telsevenements par la methode

void addMouseListener(MouseListener ml);

exemple

uneSource.addMouseListener(unAuditeur);

c©L. Tichit, 2015-2016 POO et Java 9 / 23

Page 19: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Le mecanisme des evenements

Exemple : les evenements � souris �

sont notifies par les methodes, signalant diverses actions de l’utilisateur :

void mousePressed(MouseEvent evt);

void mouseReleased(MouseEvent evt);

void mouseClicked(MouseEvent evt);

void mouseEntered(MouseEvent evt);

void mouseExited(MouseEvent evt);

comment garantir qu’un candidat auditeur les possede ?

⇒ on en fait une interface : interface MouseListener

un auditeur d’evenements souris � s’enregistre � aupres d’une source de telsevenements par la methode

void addMouseListener(MouseListener ml);

exemple

uneSource.addMouseListener(unAuditeur);

c©L. Tichit, 2015-2016 POO et Java 9 / 23

Page 20: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Le mecanisme des evenements

Exemple : les evenements � souris �

sont notifies par les methodes, signalant diverses actions de l’utilisateur :

void mousePressed(MouseEvent evt);

void mouseReleased(MouseEvent evt);

void mouseClicked(MouseEvent evt);

void mouseEntered(MouseEvent evt);

void mouseExited(MouseEvent evt);

comment garantir qu’un candidat auditeur les possede ?

⇒ on en fait une interface : interface MouseListener

un auditeur d’evenements souris � s’enregistre � aupres d’une source de telsevenements par la methode

void addMouseListener(MouseListener ml);

exemple

uneSource.addMouseListener(unAuditeur);

c©L. Tichit, 2015-2016 POO et Java 9 / 23

Page 21: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Le mecanisme des evenements

Exemple : les evenements � souris �

sont notifies par les methodes, signalant diverses actions de l’utilisateur :

void mousePressed(MouseEvent evt);

void mouseReleased(MouseEvent evt);

void mouseClicked(MouseEvent evt);

void mouseEntered(MouseEvent evt);

void mouseExited(MouseEvent evt);

comment garantir qu’un candidat auditeur les possede ?

⇒ on en fait une interface : interface MouseListener

un auditeur d’evenements souris � s’enregistre � aupres d’une source de telsevenements par la methode

void addMouseListener(MouseListener ml);

exemple

uneSource.addMouseListener(unAuditeur);

c©L. Tichit, 2015-2016 POO et Java 9 / 23

Page 22: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Le mecanisme des evenements

Exemple : les evenements � souris �

sont notifies par les methodes, signalant diverses actions de l’utilisateur :

void mousePressed(MouseEvent evt);

void mouseReleased(MouseEvent evt);

void mouseClicked(MouseEvent evt);

void mouseEntered(MouseEvent evt);

void mouseExited(MouseEvent evt);

comment garantir qu’un candidat auditeur les possede ?

⇒ on en fait une interface : interface MouseListener

un auditeur d’evenements souris � s’enregistre � aupres d’une source de telsevenements par la methode

void addMouseListener(MouseListener ml);

exemple

uneSource.addMouseListener(unAuditeur);

c©L. Tichit, 2015-2016 POO et Java 9 / 23

Page 23: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Exemple : detecter l’action sur un bouton

D’abord, les boutons mais sans le mecanisme de detection des actions :

Fichier Boutons1.java

import java.awt.*;

import javax.swing.*;

public class Boutons1 extends JPanel {

Boutons1() {JButton bouton = new JButton("Rouge");

add(bouton);

bouton = new JButton("Vert");

add(bouton);

setBackground(Color.red);

}

public static void main(String[] args) {JFrame cadre = new JFrame("Boutons 1");

cadre.setSize(300, 200);

cadre.setDefaultCloseOperation(JFrame.EXIT ON CLOSE);

cadre.setContentPane(new Boutons1());

cadre.setVisible(true);

}}

c©L. Tichit, 2015-2016 POO et Java 10 / 23

Page 24: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Exemple : detecter l’action sur un bouton

Ajout du mecanisme de detection des actions sur les boutons

Fichier Boutons2.java

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Boutons2 extends JPanel implements ActionListener {

Boutons2() {JButton bouton = new JButton("Rouge");

add(bouton);

bouton.addActionListener(this);

bouton = new JButton("Vert");

add(bouton);

bouton.addActionListener(this);

setBackground(Color.red);

}

public void actionPerformed(ActionEvent e) {if (e.getActionCommand().equals("Rouge"))

setBackground(Color.red);

else

setBackground(Color.green);

}

public static void main(String[] args) {...

}}

c©L. Tichit, 2015-2016 POO et Java 11 / 23

Page 25: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Exemple : detecter l’action sur un bouton

Ajout du mecanisme de detection des actions sur les boutons

Fichier Boutons2.java

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Boutons2 extends JPanel implements ActionListener {

Boutons2() {JButton bouton = new JButton("Rouge");

add(bouton);

bouton.addActionListener(this);

bouton = new JButton("Vert");

add(bouton);

bouton.addActionListener(this);

setBackground(Color.red);

}

public void actionPerformed(ActionEvent e) {if (e.getActionCommand().equals("Rouge"))

setBackground(Color.red);

else

setBackground(Color.green);

}

public static void main(String[] args) {...

}}

c©L. Tichit, 2015-2016 POO et Java 11 / 23

Page 26: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Exemple : detecter l’action sur un bouton

Pour distinguer les boutons, un test plus efficace

Fichier Boutons3.java

import etc.

public class Boutons3 extends JPanel implements ActionListener {

JButton boutonRouge, boutonVert;

Boutons3() {boutonRouge = new JButton("Rouge");

add(boutonRouge);

boutonRouge.addActionListener(this);

boutonVert = new JButton("Vert");

add(boutonVert);

boutonVert.addActionListener(this);

setBackground(Color.red);

}

public void actionPerformed(ActionEvent e) {if (e.getSource() == boutonRouge)

setBackground(Color.red);

else

setBackground(Color.green);

}

public static void main(String[] args) {...

}}

c©L. Tichit, 2015-2016 POO et Java 12 / 23

Page 27: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Exemple : detecter l’action sur un bouton

Pour distinguer les boutons, un test plus efficace

Fichier Boutons3.java

import etc.

public class Boutons3 extends JPanel implements ActionListener {

JButton boutonRouge, boutonVert;

Boutons3() {boutonRouge = new JButton("Rouge");

add(boutonRouge);

boutonRouge.addActionListener(this);

boutonVert = new JButton("Vert");

add(boutonVert);

boutonVert.addActionListener(this);

setBackground(Color.red);

}

public void actionPerformed(ActionEvent e) {if (e.getSource() == boutonRouge)

setBackground(Color.red);

else

setBackground(Color.green);

}

public static void main(String[] args) {...

}}

c©L. Tichit, 2015-2016 POO et Java 12 / 23

Page 28: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Exemple : detecter l’action sur un bouton

Avec deux auditeurs on n’a pas besoin de distinguer les boutons

Fichier Boutons4.java

import etc.

public class Boutons4 extends JPanel {

Boutons4() {JButton bouton = new JButton("Rouge");

add(bouton);

bouton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {

setBackground(Color.blue);

}});bouton = new JButton("Vert");

add(bouton);

bouton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {

setBackground(Color.green);

}});setBackground(Color.red);

}

public static void main(String[] args) {...

}}

c©L. Tichit, 2015-2016 POO et Java 13 / 23

Page 29: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Exemple : tracer une ligne polygonale, 1

La mauvaise facon de dessiner

Fichier Boutons4.java

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Gribouilleur1 extends JPanel

implements MouseListener {int xp = -1, yp;

public void mousePressed(MouseEvent e) {Graphics g = getGraphics();

if (xp >= 0)

g.drawLine(xp, yp, e.getX(), e.getY());

xp = e.getX();

yp = e.getY();

}

public void mouseReleased(MouseEvent e) { }public void mouseClicked(MouseEvent e) { }public void mouseEntered(MouseEvent e) { }public void mouseExited(MouseEvent e) { }

Gribouilleur1() {setBackground(Color.white);

addMouseListener(this);

}

public static void main(String[] args) {JFrame cadre = new JFrame("Gribouillis 1");

cadre.setSize(600, 400);

cadre.setDefaultCloseOperation(

JFrame.EXIT ON CLOSE);

cadre.setContentPane(new Gribouilleur1());

cadre.setVisible(true);

}}

c©L. Tichit, 2015-2016 POO et Java 14 / 23

Page 30: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Exemple : tracer une ligne polygonale, 1

La mauvaise facon de dessiner

Fichier Boutons4.java

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Gribouilleur1 extends JPanel

implements MouseListener {int xp = -1, yp;

public void mousePressed(MouseEvent e) {Graphics g = getGraphics();

if (xp >= 0)

g.drawLine(xp, yp, e.getX(), e.getY());

xp = e.getX();

yp = e.getY();

}

public void mouseReleased(MouseEvent e) { }public void mouseClicked(MouseEvent e) { }public void mouseEntered(MouseEvent e) { }public void mouseExited(MouseEvent e) { }

Gribouilleur1() {setBackground(Color.white);

addMouseListener(this);

}

public static void main(String[] args) {JFrame cadre = new JFrame("Gribouillis 1");

cadre.setSize(600, 400);

cadre.setDefaultCloseOperation(

JFrame.EXIT ON CLOSE);

cadre.setContentPane(new Gribouilleur1());

cadre.setVisible(true);

}}

c©L. Tichit, 2015-2016 POO et Java 14 / 23

Page 31: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Exemple : tracer une ligne polygonale, 1

La mauvaise facon de dessiner

Fichier Boutons4.java

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Gribouilleur1 extends JPanel

implements MouseListener {int xp = -1, yp;

public void mousePressed(MouseEvent e) {Graphics g = getGraphics();

if (xp >= 0)

g.drawLine(xp, yp, e.getX(), e.getY());

xp = e.getX();

yp = e.getY();

}

public void mouseReleased(MouseEvent e) { }public void mouseClicked(MouseEvent e) { }public void mouseEntered(MouseEvent e) { }public void mouseExited(MouseEvent e) { }

Gribouilleur1() {setBackground(Color.white);

addMouseListener(this);

}

public static void main(String[] args) {JFrame cadre = new JFrame("Gribouillis 1");

cadre.setSize(600, 400);

cadre.setDefaultCloseOperation(

JFrame.EXIT ON CLOSE);

cadre.setContentPane(new Gribouilleur1());

cadre.setVisible(true);

}}

c©L. Tichit, 2015-2016 POO et Java 14 / 23

Page 32: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Exemple : tracer une ligne polygonale, 2

La bonne facon de dessiner

Fichier Boutons4.java

import java.awt.*;

import java.awt.event.*;

import java.util.*;

import javax.swing.*;

public class Gribouilleur2 extends JPanel

implements MouseListener {

Vector<Point> points = new Vector<Point>();

public void mousePressed(MouseEvent e) {points.add(new Point(e.getX(), e.getY()));

repaint();

}

public void paint(Graphics g) {super.paint(g);

Iterator<Point> iter = points.iterator();

if (iter.hasNext()) {Point pr = iter.next();

while (iter.hasNext()) {Point pc = iter.next();

g.drawLine(pr.x, pr.y, pc.x, pc.y);

pr = pc;

}}

}

public void mouseReleased(MouseEvent e) { }public void mouseClicked(MouseEvent e) { }public void mouseEntered(MouseEvent e) { }public void mouseExited(MouseEvent e) { }

Gribouilleur2() {setBackground(Color.white);

addMouseListener(this);

}

public static void main(String[] args) {JFrame cadre = new JFrame("Gribouillis 2");

cadre.setSize(600, 400);

cadre.setDefaultCloseOperation(

JFrame.EXIT ON CLOSE);

cadre.setContentPane(new Gribouilleur2());

cadre.setVisible(true);

}}

c©L. Tichit, 2015-2016 POO et Java 15 / 23

Page 33: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Exemple : tracer une ligne polygonale, 2

La bonne facon de dessiner

Fichier Boutons4.java

import java.awt.*;

import java.awt.event.*;

import java.util.*;

import javax.swing.*;

public class Gribouilleur2 extends JPanel

implements MouseListener {

Vector<Point> points = new Vector<Point>();

public void mousePressed(MouseEvent e) {points.add(new Point(e.getX(), e.getY()));

repaint();

}

public void paint(Graphics g) {super.paint(g);

Iterator<Point> iter = points.iterator();

if (iter.hasNext()) {Point pr = iter.next();

while (iter.hasNext()) {Point pc = iter.next();

g.drawLine(pr.x, pr.y, pc.x, pc.y);

pr = pc;

}}

}

public void mouseReleased(MouseEvent e) { }public void mouseClicked(MouseEvent e) { }public void mouseEntered(MouseEvent e) { }public void mouseExited(MouseEvent e) { }

Gribouilleur2() {setBackground(Color.white);

addMouseListener(this);

}

public static void main(String[] args) {JFrame cadre = new JFrame("Gribouillis 2");

cadre.setSize(600, 400);

cadre.setDefaultCloseOperation(

JFrame.EXIT ON CLOSE);

cadre.setContentPane(new Gribouilleur2());

cadre.setVisible(true);

}}

c©L. Tichit, 2015-2016 POO et Java 15 / 23

Page 34: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Exemple : tracer une ligne polygonale, 2

La bonne facon de dessiner

Fichier Boutons4.java

import java.awt.*;

import java.awt.event.*;

import java.util.*;

import javax.swing.*;

public class Gribouilleur2 extends JPanel

implements MouseListener {

Vector<Point> points = new Vector<Point>();

public void mousePressed(MouseEvent e) {points.add(new Point(e.getX(), e.getY()));

repaint();

}

public void paint(Graphics g) {super.paint(g);

Iterator<Point> iter = points.iterator();

if (iter.hasNext()) {Point pr = iter.next();

while (iter.hasNext()) {Point pc = iter.next();

g.drawLine(pr.x, pr.y, pc.x, pc.y);

pr = pc;

}}

}

public void mouseReleased(MouseEvent e) { }public void mouseClicked(MouseEvent e) { }public void mouseEntered(MouseEvent e) { }public void mouseExited(MouseEvent e) { }

Gribouilleur2() {setBackground(Color.white);

addMouseListener(this);

}

public static void main(String[] args) {JFrame cadre = new JFrame("Gribouillis 2");

cadre.setSize(600, 400);

cadre.setDefaultCloseOperation(

JFrame.EXIT ON CLOSE);

cadre.setContentPane(new Gribouilleur2());

cadre.setVisible(true);

}}

c©L. Tichit, 2015-2016 POO et Java 15 / 23

Page 35: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Gestionnaires de disposition

Principe

conteneur

composants

gestionnairede disposition

getPreferredSize()getMinimumSize()getSize()setSize(...)setLocation(...) ...

connaît

connaît

c©L. Tichit, 2015-2016 POO et Java 16 / 23

Page 36: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Flow layout

Fichier TestFlowLayout.java

public class TestFlowLayout extends JPanel {

TestFlowLayout() {setLayout(new FlowLayout());

for (int i = 1; i <= 5; i++)

add(new JButton("Bouton " + i));

}

public static void main(String[] args) {JFrame cadre = new JFrame("Flow layout");

cadre.setSize(300, 200);

cadre.setDefaultCloseOperation(

JFrame.EXIT ON CLOSE);

cadre.setContentPane(new TestFlowLayout());

cadre.setVisible(true);

}}

c©L. Tichit, 2015-2016 POO et Java 17 / 23

Page 37: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Flow layout

Fichier TestFlowLayout.java

public class TestFlowLayout extends JPanel {

TestFlowLayout() {setLayout(new FlowLayout());

for (int i = 1; i <= 5; i++)

add(new JButton("Bouton " + i));

}

public static void main(String[] args) {JFrame cadre = new JFrame("Flow layout");

cadre.setSize(300, 200);

cadre.setDefaultCloseOperation(

JFrame.EXIT ON CLOSE);

cadre.setContentPane(new TestFlowLayout());

cadre.setVisible(true);

}}

c©L. Tichit, 2015-2016 POO et Java 17 / 23

Page 38: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Border layout

Fichier TestBorderLayout.java

public class TestBorderLayout extends JPanel {

TestBorderLayout() {setLayout(new BorderLayout());

add(new JButton("Bouton 1"),

BorderLayout.NORTH);

add(new JButton("Bouton 2"),

BorderLayout.EAST);

add(new JButton("Bouton 3"),

BorderLayout.SOUTH);

add(new JButton("Bouton 4"),

BorderLayout.WEST);

add(new JButton("Bouton 5"),

BorderLayout.CENTER);

}

public static void main(String[] args) {JFrame cadre = new JFrame("Border layout");

cadre.setSize(300, 200);

cadre.setDefaultCloseOperation(

JFrame.EXIT ON CLOSE);

cadre.setContentPane(

new TestBorderLayout());

cadre.setVisible(true);

}}

c©L. Tichit, 2015-2016 POO et Java 18 / 23

Page 39: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Border layout

Fichier TestBorderLayout.java

public class TestBorderLayout extends JPanel {

TestBorderLayout() {setLayout(new BorderLayout());

add(new JButton("Bouton 1"),

BorderLayout.NORTH);

add(new JButton("Bouton 2"),

BorderLayout.EAST);

add(new JButton("Bouton 3"),

BorderLayout.SOUTH);

add(new JButton("Bouton 4"),

BorderLayout.WEST);

add(new JButton("Bouton 5"),

BorderLayout.CENTER);

}

public static void main(String[] args) {JFrame cadre = new JFrame("Border layout");

cadre.setSize(300, 200);

cadre.setDefaultCloseOperation(

JFrame.EXIT ON CLOSE);

cadre.setContentPane(

new TestBorderLayout());

cadre.setVisible(true);

}}

c©L. Tichit, 2015-2016 POO et Java 18 / 23

Page 40: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Grid layout

Fichier TestBorderLayout.java

public class TestGridLayout extends JPanel {

TestGridLayout() {setLayout(new GridLayout(3, 2));

for (int i = 1; i <= 5; i++)

add(new JButton("Bouton " + i));

}

public static void main(String[] args) {JFrame cadre = new JFrame("Grid layout");

cadre.setSize(300, 200);

cadre.setDefaultCloseOperation(

JFrame.EXIT ON CLOSE);

cadre.setContentPane(new TestGridLayout());

cadre.setVisible(true);

}}

c©L. Tichit, 2015-2016 POO et Java 19 / 23

Page 41: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Grid layout

Fichier TestBorderLayout.java

public class TestGridLayout extends JPanel {

TestGridLayout() {setLayout(new GridLayout(3, 2));

for (int i = 1; i <= 5; i++)

add(new JButton("Bouton " + i));

}

public static void main(String[] args) {JFrame cadre = new JFrame("Grid layout");

cadre.setSize(300, 200);

cadre.setDefaultCloseOperation(

JFrame.EXIT ON CLOSE);

cadre.setContentPane(new TestGridLayout());

cadre.setVisible(true);

}}

c©L. Tichit, 2015-2016 POO et Java 19 / 23

Page 42: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Une interface non triviale

Comment obtient-on les interfaces usuelles avec ces quelques gestionnaires dedispositions si simples et bizarres ?

c©L. Tichit, 2015-2016 POO et Java 20 / 23

Page 43: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Une interface non triviale

EASTCENTER

SOUTH

c©L. Tichit, 2015-2016 POO et Java 21 / 23

Page 44: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Une interface non triviale

NORTH

CENTER

SOUTH

c©L. Tichit, 2015-2016 POO et Java 22 / 23

Page 45: Cours 6: Interfaces graphiques homme-machine - …tichit/java/cours/JavaBBSG2-06.pdf · et le langage Java Master BBSG 2 Laurent Tichit D epartement Informatique et Interactions,

IHM

Une interface non triviale

flow layout

grid layout

grid layout

flow layout

c©L. Tichit, 2015-2016 POO et Java 23 / 23