1
© Philippe GENOUD UJF Mai 2005
1
Interfaces Graphiques
Interfaces Graphiques
Dessiner avec JAVA
Contexte Graphique
Rafraîchissement
Java2D
© Philippe GENOUD UJF Mai 2005
2
GUI
GUI
bibliographie
bibliographie
The JFC Tutorial: A guide to constructing GUI
Kathy Walrath, Mary Campione
http://java.sun.com/docs/books/tutorial/uiswing
Java Tutorial Specialized trails : Trail: 2D Graphics
Deborah Adair, Jennifer Ball and Monica Pawlan
http://java.sun.com/docs/books/tutorial/2d
Java 2D Graphics
Jonathan Knudsen, Ed. O'Reilly
Java 2D API Graphics
Vincent J. Hardy, Java Series, Prentice Hall
2
© Philippe GENOUD UJF Mai 2005
3
GUI
GUI
Adaptateurs d
’é
v
é
nements
Dessin des segments de droite
Adaptateurs d
’é
v
é
nements
Dessin des segments de droite
Gestion des événements souris
Déplacement de la souris sur
la zone de dessin met à jour
les coordonnées du curseur
dans la barre d’état
MOUSE_MOVED, MOUSE_DRAGGED
Appuyer sur un bouton de la
souris (
MOUSE_PRESSED
) définit
le début d ’une droite
Relacher le bouton de la
souris (
MOUSE_RELEASED
)
définit la fin de la droite
type d ’événement MouseEvent
source : zone de dessin
interface d ’écoute : MouseListener
récepteur : zone de dessin
< interface >
MouseListener
void mouseClicked(MouseEvent)
void mouseEntered(MouseEvent)
void mouseExited(MouseEvent)
void mousePressed(MouseEvent)
void mouseReleased(MouseEvent)
Comme pour la fermeture de la
fenêtre seule deux des méthodes
de l ’interface nous intéressent
© Philippe GENOUD UJF Mai 2005
4
GUI
GUI
Adaptateurs d
’é
v
é
nements
Dessin des segments de droite
Adaptateurs d
’é
v
é
nements
Dessin des segments de droite
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ZoneDessin extends JPanel
implements MouseMotionListener {
private BarreEtat be;
public ZoneDessin(BarreEtat be) {
setBackground(Color.white);
setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
this.be = be;
addMouseMotionListener(this);
}
public void mouseMoved(MouseEvent e) {
be.afficheCoord(e.getX(),e.getY());
}
public void mouseDragged(MouseEvent e) {
be.afficheCoord(e.getX(),e.getY());
}
} // ZoneGraphique
addMouseListener(new GestionnaireClic(this));
public void initieDroite(int x, int y) {
be.afficheMessage("Relacher pour dessiner la droite");
// on complétera ensuite
}
public void termineDroite(int x, int y) {
be.afficheMessage("Cliquer pour initier une droite");
// on complétera ensuite
}
import java.awt.event.*;
public class GestionnaireClic
extends MouseAdapter {
ZoneGraphique zone;
public GestionnaireClic(ZoneGraphique z)
{
zone = z;
}
public void mousePressed(MouseEvent e)
{
zone.initieDroite(e.getX(),e.getY());
}
public void mouseReleased(MouseEvent e)
{
zone.termineDroite(e.getX(),e.getY());
}
}
Pour ne pas avoir à définir des
méthodes inutiles possibilité
d’utiliser un adaptateur
d’événements : MouseAdapter
3
© Philippe GENOUD UJF Mai 2005
5
GUI
GUI
Adaptateurs d
’é
v
é
nements
Dessin des segments de droite
Adaptateurs d
’é
v
é
nements
Dessin des segments de droite
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ZoneDessin extends Jpanel implements MouseMotionListener {
private BarreEtat be;
public ZoneDessin(BarreEtat be) {
setBackground(Color.white);
setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
this.be = be;
addMouseMotionListener(this);
}
public void initieDroite(int x, int y) {
be.afficheMessage(« Relacher pour dessiner la droite »);
// on complétera ensuite
}
public void termineDroite(int x, int y) {
be.afficheMessage(« Cliquer pour initier une droite »);
// on complétera ensuite
}
...
} // ZoneGraphique
new MouseAdapter() {
public void mousePressed(MouseEvent e)
{
initieDroite(e.getX(),e.getY());
}
public void mouseReleased(MouseEvent e)
{
termineDroite(e.getX(),e.getY());
}
}
addMouseListener(
);
Avec une classe interne
(inner classe) anonyme
ZoneDessin.this
L’instance de la classe
anonyme a implicitement
accès à l ’instance de la
classe externe qui (c.a.d.
l’instance) a provoqué sa
création :
en conséquence elle a
accès aux membres de la
classe externe
© Philippe GENOUD UJF Mai 2005
6
GUI
GUI
Dessiner avec Java
Dessin des segments de droite
Dessiner avec Java
Dessin des segments de droite
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ZoneDessin extends Jpanel implements MouseMotionListener {
private BarreEtat be;
public ZoneDessin(BarreEtat be) {
setBackground(Color.white);
setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
this.be = be;
addMouseMotionListener(this);
}
public void initieDroite(int x, int y) {
be.afficheMessage(« Relacher pour dessiner la droite »);
// on complétera ensuite
}
public void termineDroite(int x, int y) {
be.afficheMessage(« Cliquer pour initier une droite »);
// on complétera ensuite
}
...
} // ZoneGraphique
new MouseAdapter() {
public void mousePressed(MouseEvent e)
{
initieDroite(e.getX(),e.getY());
}
public void mouseReleased(MouseEvent e)
{
termineDroite(e.getX(),e.getY());
}
}
addMouseListener(
);
Comment
dessiner avec
Java ?
// on complétera ensuite
// on complétera ensuite
4
© Philippe GENOUD UJF Mai 2005
7
GUI
GUI
Contexte Graphique
Contexte Graphique
Ici le support du dessin représenté par une instance de la classe JPpanel
avec java.awt dans la plupart des cas il s’agit d ’une instance de la classe
Canvas
Il faut des outils pour dessiner :
primitives géométriques (droites, cercles, rectangles …)
gestion des attributs de tracé (couleur du trait, couleur de remplissage, polices
de caractères …)
Ces outils sont représentés en Java par la classe Graphics du package
java.awt
Classe abstraite : les instances de cette classe sont fournies à la demande par le système
d’exploitation qui grâce à la machine virtuelle instanciera une sous-classe de Graphics
spécifique à la plate-forme utilisée
Object
Graphics
The Graphics class is the abstract base class for all graphics contexts that allow an application to draw onto
components that are realized on various devices, as well as onto off-screen images.
A Graphics object encapsulates state information needed for the basic rendering operations that Java supports.
méthodes de Graphics
pour dessiner des formes
© Philippe GENOUD UJF Mai 2005
8
GUI
GUI
Dessiner avec Java
Dessin des segments de droite
Dessiner avec Java
Dessin des segments de droite
Repère graphique
Appuyer sur un bouton de la
souris (
MOUSE_PRESSED
) définit
le début d ’une droite
Relacher le bouton de la
souris (
MOUSE_RELEASED
)
définit la fin de la droite
type d’événement MouseEvent
Exprimées dans le repère de la
source de l’événement : le JPanel
X
y
x
y
?
?
?
?
x
y
Coordonnées position de
la souris
150
50
250
110
5
© Philippe GENOUD UJF Mai 2005
9
GUI
GUI
Dessiner avec Java
Dessin des segments de droite
Dessiner avec Java
Dessin des segments de droite
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ZoneDessin extends Jpanel implements MouseMotionListener {
private BarreEtat be;
public ZoneDessin(BarreEtat be) {
setBackground(Color.white);
setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
this.be = be;
addMouseMotionListener(this);
addMouseListener( new MouseAdapter() { ... } );
}
public void initieDroite(int x, int y) {
be.afficheMessage(« Relacher pour dessiner la droite »);
}
public void termineDroite(int x, int y) {
be.afficheMessage(« Cliquer pour initier une droite »);
}
...
} // ZoneDessin
int xInit, yInit;
xInit = x;
yInit = y;
lorsque le bouton de
la souris est pressé :
mémoriser le début
d’un nouveau
segment
lorsque le bouton de
la souris est relaché :
Graphics g = this.getGraphics();
1) récupérer le
contexte graphique
associé au JPanel
g.drawLine(xInit,yInit,x,y);
2) Utiliser l’objet
Graphics pour
effectuer le dessin
© Philippe GENOUD UJF Mai 2005
10
GUI
GUI
Dessiner en Java
« rafraichissement » du dessin
Dessiner en Java
« rafraichissement » du dessin
Problème de réaffichage après que la fenêtre ait été masquée,
redimensionnée…
1
2
3
Zône non rafraichie
Application seule ne peut pas
décider du moment où elle doit
être rafraîchie
Le système ne prend pas en
charge seul le rafraîchissement
avertit uniquement
l’application qu’elle doit se
redessiner (en lui indiquant
quel est son rectangle
invalide)
à la charge de celle-ci de
se redessiner
GO
1 / 23 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !