Académique Documents
Professionnel Documents
Culture Documents
INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
NOUVEAUTES DE JAVA 1.1................................................................................................................2
LES NOUVEAUTES DES AWT..............................................................................................................2
P EERS ...........................................................................................................................................3
APERU GENERAL.....................................................................................4
LES EVENEMENTS......................................................................................6
LE MODELE ANCIEN .........................................................................................................................6
Capter un vnement....................................................................................................................7
Exemple....................................................................................................................................8
LE NOUVEAU MODELE ....................................................................................................................10
Listeners..................................................................................................................................11
Mthodes des listeners................................................................................................................11
Adaptateurs..............................................................................................................................13
INNER CLASSES.............................................................................................................................15
C O N T E N E U R S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
P RINCIPALES CARACTERISTIQUES DES LAYOUT .................................................................................18
BorderLayout............................................................................................................................18
FlowLayout.............................................................................................................................18
GridLayout...............................................................................................................................18
Note sur FlowLayout.................................................................................................................19
D E S S I N . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
C H O I X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
C OMPORTEMENT COMMUN ............................................................................................................24
BOUTON A COCHER........................................................................................................................24
11/05/98
Introduction
Nouveauts de Java 1.1
Internationalisation,
Applettes signes,
format de fichier JAR,
amlioration de AWT (window toolkit),
modle de composants JavaBeans(tm),
amliorations de gestion de rseau,
package mathmatique pour grands nombres,
appel distance: Remote Method Invocation (RMI),
rflection,
connexion aux bases de donnes database connectivity
(JDBC),
srialisation dobjets,
classes internes.
11/05/98
Peers
Les peers sont prsents depuis toujours dans Java.
Les peers sont des classes AWT constitus de composants
natifs, c'est--dire dpendant de la plateforme.
Un composant Java dlgue une grande partie de leurs
fonctionnalits son peer.
Pour un menu, sous Unix, JDK cre un menu Motif, sous
Windows, c'est un menu Windows, etc.
Cette approche a permis un dveloppement rapide de Java. De
plus, le look-and-feel d'un programme ou d'une applette
correspond au systme natif de la machine qui l'excute.
Remplac progressivement par des widgets Java purs.
11/05/98
Aperu gnral
Les programmes sont dirigs par vnement s'ils font usage de
classes awt (abstract windowing toolkit).
La classe de base des awt est la classe abstraite Component.
Les classes conteneur sont
Container (abstraite, responsable du layout)
Window (interaction avec le systme)
Frame (fentre principale d'application)
Dialog
Panel (pour contenir des composants)
Applet
ScrollPane (enrobe un conteneur d'ascenseurs)
Les classes d'interaction sont
Canvas (dessin)
Label
Button
TextComponent
TextField
TextArea
Checkbox
Choices (combobox)
List
Scrollbar
Les menus sont part.
Un programme tend Frame, une applette tend Applet.
Une applette est excute travers un fichier html, du type
<title>Essai</title>
<hr>
<applet code="PlusMoins.class", width=300, height=100>
</applet>
<hr>
11/05/98
import java.awt.*;
class PlusMoins extends Frame {
Button oui, non;
Label diff;
public PlusMoins() {
super("Oui et non");
oui = new Button("Plus!");
non = new Button("Moins!");
diff = new Label("0", Label.CENTER);
add(oui, "North");
add(non,"South");
add(diff,"Center");
show();
}
public static void main(String[] argv) {
new PlusMoins();
}
11/05/98
Les vnements
Le modle ancien
Chaque classe drivant de awt.Component hrite dune
mthode
boolean handleEvent(Event e)
qui se comporte grosso-modo comme la procdure de fentres
de Windows. Voici la mthode de base
//java.awt.Component.handleEvent()
public boolean handleEvent() {
switch (e.id) {
case Event.MOUSE_ENTER :
return mouseEnter(e, e.x, e.y) ;
case Event.MOUSE_EXIT :
return mouseExit(e, e.x, e.y) ;
case Event.MOUSE_MOVE :
return mouseMove(e, e.x, e.y) ;
case Event.MOUSE_DOWN :
return mouseDown(e, e.x, e.y) ;
case Event.MOUSE_DRAG :
return mouseDrag(e, e.x, e.y) ;
case Event.MOUSE_UP :
return mouseUp(e, e.x, e.y) ;
case Event.KEY_PRESS :
case Event.KEY_ACTION :
return keyDown(e, e.key) ;
case Event.KEY_RELEASE :
case Event.KEY_ACTION_RELEASE :
return keyUp(e, e.key) ;
case Event.ACTION_EVENT :
return action(e, e.arg) ;
case Event.GOT_FOCUS :
return gotFocus(e, e.arg) ;
case Event.LOST_FOCUS :
return lostFocus(e, e.arg) ;
}
return false ;
}
11/05/98
Checkbox
MenuItem
Choice
TextField
Exemple
import java.awt.*;
class ActionTest extends Frame {
Button
button = new Button("Cancel");
Checkbox checkbox = new Checkbox("Something to check about");
TextField textfield = new TextField(25);
Choice
choice = new Choice();
List
list
= new List();
MenuItem quitItem = new MenuItem("quit");
static public void main(String args[]) {
Frame frame = new ActionTest();
frame.reshape(100,100,200,200);
frame.show();
}
public ActionTest() {
super("Action Test");
MenuBar menubar = new MenuBar();
Menu
fileMenu = new Menu("File");
fileMenu.add("menu item");
fileMenu.add(quitItem);
menubar.add(fileMenu);
setMenuBar(menubar);
choice.addItem("One");
choice.addItem("Two");
choice.addItem("Three"); choice.addItem("Four");
list.addItem("item One"); list.addItem("item Two");
list.addItem("item Three");list.addItem("item Four");
list.addItem("item Five"); list.addItem("item Six");
setLayout(new GridLayout(0,1));
add(button); add(checkbox);
add(list); add(textfield); add(choice);
}
public boolean action(Event event, Object what) {
if(event.target == quitItem) {
System.exit(0);
}
System.out.print(event.target.getClass().getName());
System.out.println(" " + what.getClass().getName() +
"= " + what);
return true;
}
}
11/05/98
11/05/98
Le nouveau modle
Le nouveau modle est en de nombreux point plus proche de
X-Window.
Les vnements sont capts et traits par des listeners.
Les listeners sont enregistrs sur les composants en appelant
une mthode AddXYZListener. C'est donc proche du
XtAddCallback() de Xt Intrinsics.
Chaque classe de listeners a des mthodes de traitement
d'vnements (des callbacks).
Les classes de listeners sont des interfaces.
Il suffit de dfinir ces mthodes, par implmentation d'un
listener.
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
public class ActionExample extends Applet {
public void init() {
Button button = new Button("Activate Me");
button.addActionListener(new ButtonListener());
add(button);
}
}
class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
System.out.println("Button Activated!");
}
}
Le bouton est dot d'un listener d'actions.
Les activits raliser lors d'un vnement action sont dcrite
dans le ActionListener : cette classe n'a qu'une seule mthode
propre qu'il s'agit d'crire.
11/05/98
10
Listeners
Les listeners ont pour classe de base java.util.EventListener.
Les 11 listeners eux-mmes sont des interfaces. Ce sont
ActionListener
AdjustmentListener
ComponentListener
FocusListener
ContainerListener
ItemListener
KeyListener
TextListener
MouseListener
MouseMotionListener
WindowListener
Ils sont dfinis dans java.event.
Chaque composant a ses mthodes d'enregistrement de
listener,
Button
Checkbox
Choice
Component
Container
List
void addActionListener(ActionListener)
void addItemListener(ItemListener)
id
void addComponentListener(ComponentListener)
void addFocusListener(FocusListener)
void addKeyListener(KeyListener)
void addMouseListener(MouseListener)
void addMouseMotionListener(MouseMotionListener)
void addContainerListener(ContainerListener)
void addItemListener(ItemListener)
void addActionListener(ActionListener)
11/05/98
11
ContainerListener
ItemListener
KeyListener
void
void
void
void
void
void
void
void
void
void
void
actionPerformed(ActionEvent)
componentResized(ComponentEvent)
componentMoved(ComponentEvent)
componentShown(ComponentEvent)
componentHidden(ComponentEvent)
componentAdded(ContainerEvent)
componentRemoved(ContainerEvent)
itemStateChanged(ItemEvent)
keyTyped(KeyEvent)
keyPressed(KeyEvent)
keyReleased(KeyEvent)
11/05/98
12
Adaptateurs
L'implmentation d'une interface demande l'criture de toutes
ses mthodes.
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
public class ButtonTest extends Applet {
public void init() {
Button button = new Button("Press Me");
button.addMouseListener(new ButtonMouseListener());
add(button);
}
}
class ButtonMouseListener implements MouseListener {
public void mouseEntered(MouseEvent event) {
System.out.println("Mouse Entered Button");
}
public void mouseExited(MouseEvent event) {
System.out.println("Mouse Exited Button");
}
public void mousePressed (MouseEvent event) { }
public void mouseClicked (MouseEvent event) { }
public void mouseReleased(MouseEvent event) { }
}
Le package java.awt.event contient des classes appeles
adapters, et qui implmentent les interfaces. Par exemple,
MouseAdapter implmente MouseListener. L'implmentation
consiste ne rien faire.
11/05/98
13
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
public class ButtonTest2 extends Applet {
public void init() {
Button
button = new Button("Press Me");
button.addMouseListener(new ButtonMouseListener());
add(button);
}
}
class ButtonMouseListener extends MouseAdapter {
public void mouseEntered(MouseEvent event) {
System.out.println("Mouse Entered Button");
}
public void mouseExited(MouseEvent event) {
System.out.println("Mouse Exited Button");
}
}
11/05/98
14
Inner classes
Depuis la version 1.1, une classe peut tre dfinie l'intrieur
d'une autre classe. Elle a alors un accs direct l'objet qui
provoque l'vnement.
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
public class ButtonTest2 extends Applet {
public void init() {
Button
button = new Button("Press Me");
button.addMouseListener(new ButtonMouseListener());
add(button);
}
class ButtonMouseListener extends MouseAdapter {
public void mouseEntered(MouseEvent event) {
System.out.println("Mouse Entered Button");
}
public void mouseExited(MouseEvent event) {
System.out.println("Mouse Exited Button");
}
}
}
La classe ButtonMouseListener est locale la classe de l'applette
(inner class), et son nom n'a d'autre rle que de servir la
cration d'un objet.
On peut conomiser cette construction par une inner classe
anonyme. (Ceci rappelle la possibilit, en C usuel, de ne pas
nommer une struct, mais d'en utiliser la dclaration.)
11/05/98
15
11/05/98
16
Conteneurs
Les conteneurs sont drivs de la classe abstraite Container.
La classe Container est responsable de la disposition des
composants qu'elle contient. Elle est faite selon un
LayoutManager.
Chaque conteneur dispose d'un LayoutManager par dfaut:
Panel : FlowLayout
Window, Dialog, Frame : BorderLayout
Les applettes et les applications autonomes ne fonctionnent
donc pas de la mme manire par dfaut.
On modifie le gestionnaire par
setLayout(new BorderLayout());
pour avoir un gestionnaire de style BorderLayout. Les
gestionnaires de gomtrie sont:
BorderLayout
FlowLayout
GridLayout
GridBagLayout
CardLayout
Les deux derniers sont compliqus.
11/05/98
17
11/05/98
18
11/05/98
19
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class CanvasTest extends Applet {
public void init() {
Canvas canvas = new ExampleCanvas();
canvas.addComponentListener(new
DbgComponentListener());
add(canvas);
}
}
class ExampleCanvas extends Canvas {
public void paint(Graphics g) {
Dimension size = getSize();
g.drawRect(0,0,size.width-1,size.height-1);
g.setColor(Color.lightGray);
g.draw3DRect(1,1,size.width-3,
size.height-3,true);
g.setColor(Color.blue);
g.drawString("Canvas!",20,20);
g.setColor(Color.orange);
g.fillRect(10,40,20,20);
g.setColor(Color.red);
g.drawRect(9,39,22,22);
g.setColor(Color.gray);
g.drawLine(40,25,80,80);
g.setColor(Color.black);
g.drawLine(50,50,20,90);
g.setColor(Color.cyan);
g.fillArc(60,25,30,30,0,270);
}
public Dimension getPreferredSize() {
return new Dimension(100,100);
}
}
11/05/98
20
Dessin
La classe Component (et donc ses sous-classes) ont les
mthodes
paint(Graphics)
repaint()
update(Graphics)
pour dessiner.
paint()
repaint()
update()
peint le document
poste un update()
repeint le fond puis appelle paint().
11/05/98
21
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class CanvasTest extends Applet {
public void init() {
Canvas canvas = new ExampleCanvas();
canvas.addComponentListener(new
DbgComponentListener());
add(canvas);
}
}
class ExampleCanvas extends Canvas {
public void paint(Graphics g) {
Dimension size = getSize();
g.drawRect(0,0,size.width-1,size.height-1);
g.setColor(Color.lightGray);
g.draw3DRect(1,1,size.width-3,
size.height-3,true);
g.setColor(Color.blue);
g.drawString("Canvas!",20,20);
g.setColor(Color.orange);
g.fillRect(10,40,20,20);
g.setColor(Color.red);
g.drawRect(9,39,22,22);
g.setColor(Color.gray);
g.drawLine(40,25,80,80);
g.setColor(Color.black);
g.drawLine(50,50,20,90);
g.setColor(Color.cyan);
g.fillArc(60,25,30,30,0,270);
}
public Dimension getPreferredSize() {
return new Dimension(100,100);
}
}
11/05/98
22
avec
import java.awt.*;
import java.awt.event.*;
public class DbgComponentListener implements
ComponentListener {
public void componentResized(ComponentEvent event) {
System.out.println("");
}
public void componentShown(ComponentEvent event) {
System.out.println(event.toString());
}
public void componentMoved(ComponentEvent event) {
System.out.println(event.toString());
}
public void componentHidden(ComponentEvent event) {
System.out.println(event.toString());
}
}
11/05/98
23
Choix
Checkbox boutons cocher et boutons radio
Choice les combobox de Windows
List les listes usuelles.
Comportement commun
Implmentent l'interface ItemSelectable, compos des
mthodes
addItemListener(ItemListener)
removeItemListener(ItemListener)
Object[] getSelectedObjects() retourne les objets slectionns
ou null
L'interface ItemListener a la mthode
public abstract void itemStateChanged(ItemEvent e)
et un ItemEvent est engendr lorsqu'un item est slectionn
ou dselectionn.
Compos de (public static final int)
ITEM_FIRST
ITEM_LAST
ITEM_STATE_CHANGED
SELECTED
DESELECTED
Et de mthodes d'accs l'origine de l'information.
Bouton cocher
Un bouton cocher a deux tats.
11/05/98
24
11/05/98
25