Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Eigene Events?

30 views
Skip to first unread message

Markus Dreyer

unread,
Sep 12, 2000, 9:37:21 AM9/12/00
to
Hallo,

wie benutze ich eigene Events in Java1.1?

Ich habe eine Klasse, die Berechnungen durchfuehrt und dabei ab und zu einen
Event ausloesen soll. Ein Listener soll diese Events automatisch empfangen
und jeweils eine Nachricht ausgeben.

Wie geht sowas?


Andreas Jaeger

unread,
Sep 12, 2000, 10:13:18 AM9/12/00
to
Wenn es ein einziger Listener für immer und ewig sein soll, ist das nichts für
das Event-Modell. Da brauchst Du kein Tam-Tam. Du referenzierst den
Listener und machst eine eventHappened()-oder-ähnlich-Methode in dem
Listener verfügbar, die Du dann halt immer aufrufst.

Wenn es dynamisch werden soll:

1.) Interface mit den eventHappened(Parameter)-Methode/n
2.) Interface in den potentiellen Listenern implementieren
3.) In der Berechnungsklasse eine Liste listeners als Instanz,
dazu eine addListener() und removeListener()-Methode
4.) Bei jedem Event durch die listeners iterieren und die
passende Event-Methode des Interfaces aufrufen.

Holger von Thomsen

unread,
Sep 12, 2000, 10:27:58 AM9/12/00
to
Hallo!

Schau Dir mal die Packages java.awt.event.* und javax.swing.event.* sowie die
Klasse java.awt.Event und ihre Ableitungen an.
Vielleicht hilft Dir auch das Tutorial bei SUN:
http://java.sun.com/docs/books/tutorial/uiswing/events/index.html o.s.ä.

Außerdem mußt Du Dich mit der AWTEventQueue beschäftigen. s.o.

MfG
Holger

Leelex

unread,
Sep 12, 2000, 10:38:36 AM9/12/00
to
Hi,
für eigene Events folgendermaßen vorgehen (Beispiel mit Übergabe eines
Parameters):

1) ein sog. EventObjekt erstellen -> Ableitung aus Class EventObject:

import java.util.EventObject;

public class MessageHandlerEvent extends EventObject {

private int fButtonNumber;

public MessageHandlerEvent(Object source, int button) {
super(source);
fButtonNumber = button;
}

public int getButtonNumber() {
return fButtonNumber;
}

}

2) ein sog. EventListener erstellen -> Ableitung aus Class EventListener:

import MessageHandlerEvent;

import java.util.EventListener;


public interface MessageHandlerListener extends EventListener {

public void buttonClicked(MessageHandlerEvent event);

}

3) die Klasse, welches das Event auslöst mit den drei Methoden für
Registrierung, Löschung und Auslösung von Events erweitern:

import MessageHandler*;

public class MessageDialog extends java.awt.Dialog {

private Vector msgHandlerListener = null;

public void addMessageHandlerListener(MessageHandlerListener listener) {

if (msgHandlerListener == null) {
msgHandlerListener = new Vector();
}

msgHandlerListener.add(listener);

}

public void removeMessageHandlerListener(MessageHandlerListener
listener) {

if (msgHandlerListener != null) {
msgHandlerListener.remove(listener);
}
}

public void fireButtonClicked(int buttonNumber) {

int i;
MessageHandlerListener msg;

if (msgHandlerListener == null) {
return;
}

for (i = 0; i < msgHandlerListener.size(); i++) {
msg = (MessageHandlerListener) msgHandlerListener.elementAt(i);
if (msg != null ) {
msg.buttonClicked(new MessageHandlerEvent(this,
buttonNumber));
} // if
} // for
}

}

In der Klasse kann nun anbeliebiger Stelle das Event über die Methode "fireB
uttonClicked" ausgelöst werden. Diese Methode sendet dann an alle
registrierten Objekte (Registrierung über addMessageHandlerListener()) das
entsprechende Event mit den zusätzlichen Parameter "buttonNumber";

4) Klassen als Empfänger des Events registrieren:

import MessageHandlerListener;
import MessageDialog;

public class EventReceiver extends Object {

private int returnButton;

public EventReceiver() {

MessageDialog dialog = new MessageDialog();

// sog. anonyme Klasse, kann auch über eine "inner class" realisiert
werden
dialog.addMessageHandlerListener(new MessageHandlerListener() {
public void buttonClicked(MessageHandlerEvent event) {
returnButton = event.getButtonNumber();
}
}
);
}

} // end of class

Das wars, ich hoffe, ich konnte Dir helfen.

Ciao Alex

0 new messages