[ Pobierz całość w formacie PDF ]
numOfPoints = 0;
}
}
public boolean mouseDown(Event evt, int x, int y) {
switch (numOfPoints) {
case 0: {
startx = x;
starty = y;
numOfPoints = 2;
return true;
}
case 2: {
endx = x;
endy = y;
numOfPoints = 4;
repaint();
return true;
}
}
return false;
}
}
Das folgende Beispiel zeigt ein Applet, das einen Schaltknopf mit der Aufschrift Press Me
enthlt. Durch Mausklick auf diesen Button ndert sich die Aufschrift zu Thanks ... Klickt
man auf eine andere Stelle des Applets, so wird Press Me again angezeigt. Dazu ist es ntig,
die Methoden action() und mouseDown() zu berschreiben.
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class applet7 extends Applet {
Button myButton;
public void init() {
myButton = new Button("Press Me ");
add(myButton);
}
public boolean action(Event evt, Object arg) {
if (evt.target == myButton) {
myButton.setLabel("Thanks ...");
return true;
}
else
return false;
}
public boolean mouseDown(Event evt, int x, int y) {
myButton.setLabel("Press Me again ");
return true;
}
}
Rechenzentrum der Universitt Osnabrck
54
Das neue Event-Handling
Bei dem neuen Event-Handling handelt es sich um ein sogenanntes delegations basiertes
Modell: In diesem Modell werden Events von Event Quellen (sourcen) erzeugt. Sogenannte
Zuhrer (listener) werden registriert und entscheiden durch ihre Implementation ber die
Antwort auf den Event. Auerdem gibt es mehrere Event Klassen. Doch der Reihe nach ...
Listener sind Interface Klassen, deren Methoden in der eigenen Klasse implementiert
werden. Fr Buttons ist z.B. der ActionListener verantworlich. Wie bekannt, mu ein
Interface bei der Klassendefinition angegeben werden:
public class myApplet extends Applet implements ActionListener
In der folgenden Tabelle sind Listener Interfaces und deren Methoden zusammengestellt:
Listener Interface Methoden
ActionListener actionPerformed(ActionEvent e)
AdjustmentListener adjustmentValueChanged(AdjustmentEvent e)
ComponentListener componentHidden(ComponentEvent e)
componentMoved(ComponentEvent e)
componentResized(ComponentEvent e)
componentShown(ComponentEvent e)
ContainerListener componentAdded(ContainerEvent e)
componentRemoved(ContainerEvent e)
FocusListener focusGained(FocusEvent e)
focusLost(FocusEvent e)
ItemListener itemStateChanged(ItemEvent e)
KeyListener keyPressed(KeyEvent e)
keyReleased(KeyEvent e)
keyTyped(KeyEvent e)
MouseListener mouseClicked(MouseEvent e)
mouseEntered(MouseEvent e)
mouseExited(MouseEvent e)
mousePressed(MouseEvent e)
mouseReleased (MouseEvent e)
MouseMotionListener mouseDragged(MouseEvent e)
mouseMoved(MouseEvent e)
TextListener textValueChanged(TextEvent e)
WindowListener windowActivated(WindowEvent e)
windowClosed(WindowEvent e)
windowClosing(WindowEvent e)
windowDeactivated(WindowEvent e)
windowDeiconified(WindowEvent e)
windowIconified(WindowEvent e)
windowOpened(WindowEvent e)
Damit fr eine Komponente wie z.B. der Button, das richtige Listener Interface implementiert
werden kann, mu klar sein, welchen Event diese Komponente erzeugt. Das ist in der
folgenden Tablen zusammengestellt:
Rechenzentrum der Universitt Osnabrck
55
Event Klassen, die die Komponente erzeugen kann
Komponete action adjust component container focu item key mouse mouse text window
ment s motion
Button x x x x x x
Canvas x x x x x
CheckBox x x x x x x
CheckBoxM x
enuItem
Choice x x x x x x
Component x x x x x
Container x x x x x x
Dialog x x x x x x x
Frame x x x x x x x
Label x x x x x
List x x x x x x x
MenuItem x
Panel x x x x x x
Scrollbar x x x x x x
ScrollPane x x x x x x
TextArea x x x x x x
TextCompon xx x x x x
ent
TextField x x x x x x x
Window x x x x x x x
Eine Beschreibung der einzelnen Event Klassen wrde an dieser Stelle zu weit fhren. Nhere
Hinweise findet man z.B. unter http://java.sun.com/docs/books/tutorial/post1.0/
ui/eventsandcomponents.html.
Die Programmierung von Event-Handlern erfolgt in drei Schritten:
" Das class Statement wird um die zu implementierenden Event Interfaces erweitert:
public class myApplet extends Applet
implements MouseListener,ActionListener
" Registrierung des Listeners an Komponenten.
Button myButton = new Button("Hi");
myButton.addActionListener(this);
" Implementation des Listener Interfaces.
public void actionPerformed(ActionEvent e) {
// weitere Code
in den beiden folgenden Beispielen ist das Event-Handling auf die neue Methode umgestellt
worden:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class applet9 extends Applet implements MouseListener {
int startx,starty,endx,endy;
int numOfPoints=0;
public void init() {
addMouseListener(this);
}
public void paint (Graphics g) {
Rechenzentrum der Universitt Osnabrck
56
if (numOfPoints == 4) {
g.drawLine(startx,starty,endx,endy);
numOfPoints = 0;
}
}
public void mouseClicked(MouseEvent evt) {
switch (numOfPoints) {
case 0: {
startx = evt.getX();
starty = evt.getY();
numOfPoints = 2;
break;
}
case 2: {
endx = evt.getX();
endy = evt.getY();
numOfPoints = 4;
repaint();
}
}
}
public void mouseEntered(MouseEvent evt) {
}
public void mouseExited(MouseEvent evt) {
}
public void mousePressed(MouseEvent evt) {
}
public void mouseReleased(MouseEvent evt) {
}
}
In der init() Methode wird der MouseListener an die Komponente applet9 gebunden. Mit
den Methoden getX() bzw getY() wird die x bzw. y Koordinate (in Pixel) aus dem
MouseEvent bergeben.
Da es sich um ein Interface handelt, mssen alle Methoden des Interfaces, auch wenn sie nicht
bentigt werden, implementiert werden. Ansonsten gibt es eine Fehlermeldung.
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class applet10 extends Applet implements ActionListener, MouseListener {
Button myButton;
public void init() {
myButton = new Button("Press Me ");
add(myButton);
myButton.addActionListener(this);
addMouseListener(this);
}
public void actionPerformed(ActionEvent evt) {
myButton.setLabel("Thanks ...");
}
public void mouseClicked(MouseEvent evt) {
myButton.setLabel("Press Me again...");
}
public void mouseEntered(MouseEvent evt) {
}
public void mouseExited(MouseEvent evt) {
}
public void mousePressed(MouseEvent evt) {
}
Rechenzentrum der Universitt Osnabrck
57
public void mouseReleased(MouseEvent evt) {
}
}
In diesem Beispiel wird an einen Button der ActionListener gebunden und der
MouseListener an die Komponente applet10.
Rechenzentrum der Universitt Osnabrck
58
7 Anhang
7.1 Weitere Programmbeispiele
In diesem Teil finden Sie einige vollstndige Programmbeispiele. Das erste Beispiel zeigt, wie
aus Applikationen heraus eine Druckausgabe des graphischen Kontexts erreicht werden kann.
Diese Mglichkeit besteht erst ab der Version 1.1 des JDK.
Beispiel 1:
import java.awt.*;
import java.awt.event.*;
public class PrintJob1 extends Frame
implements WindowListener, ActionListener {
Button myPrint = new Button("Print");
// ber diesen Button soll die Printausgabe angeregt werden.
PrintCanvas canvas;
// Auszugebende Graphik
public static void main (String argv []) {
Frame myFrame = new PrintJob1();
myFrame.setSize(200,300);
myFrame.show();
}
public PrintJob1() {
addWindowListener(this);
// Registrierung des WindowListeners
myPrint.addActionListener(this);
// Registrierung des ActionListeners
setTitle(this.getClass().getName());
canvas = new PrintCanvas();
// Erzeugung eines graphischen Kontextes
add("Center", canvas);
add("North",myPrint);
pack();
}
public void actionPerformed(ActionEvent e) {
System.out.println ("Button");
java.awt.PrintJob pjob = this.getToolkit().getPrintJob(this,"Test",null);
// Erzeugen eines PrintJob Objekts
if (pjob != null) {
Graphics pg = pjob.getGraphics();
// Das graphische Objekt wird geholt ...
if (pg != null) {
canvas.print (pg);
// ... und ausgegeben...
pg.dispose();
// Ende der Print Seite
}
pjob.end();
// Ende des Print Jobs
}
}
public void windowClosing(WindowEvent e) {
Rechenzentrum der Universitt Osnabrck
59
System.out.println("Ende ...");
System.exit(0);
}
public void windowClosed(WindowEvent event) {
}
public void windowDeiconified(WindowEvent event) {
}
[ Pobierz całość w formacie PDF ]