La programmation orient´ ee objets et le langage Java Master BBSG 2 Laurent Tichit D´ 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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