c0d3x
c0d3x

Reputation:

Is there an standard class for Events in Java?

I wrote a Listener. Now I want to notify it, when a change occurs. Nothing special.

Now I'm asking myself: Is there I standard class for Events that I can use, or do I have to write a new one by myself?

I know there ara java.awt.Event and AWTEvent. But I am not working directly at GUI level here. Furthermore we are using Swing at GUI level. So I'm not shure if it is a good idea to mix Swing and AWT.

Thx

Upvotes: 3

Views: 659

Answers (6)

Ilya Boyandin
Ilya Boyandin

Reputation: 3099

Kind of a standard solution in Swing apps is to maintain a list of event listeners in the class the event originates from. When the event occurs you iterate over the list and notify each listener of the event. So it can be something like this (I omitted the access modifiers and some of the type declarations for brevity):

class SomeClassInWhichTheEventOccurs {
    List<MyListener> listeners;
    void addListener(listener) { listeners.add(listener); }
    void removeListener(listener) { listeners.remove(listener); }
    void fireEvent(someEventParameters) {
        foreach (listener in listeners) listener.eventOccured();
    }
    void someMethodInWhichTheEventOccurs() {
       ...
       fireEvent(someEventParameters);
    }
}

The event parameters can be just anything: you can create your own event class, reuse java.awt.Event, or pass some parameters of arbitrary types.

Upvotes: 1

cdmckay
cdmckay

Reputation: 32240

I've always used EventObject as the base class for my custom events. Here's what the JavaDoc says:

The root class from which all event state objects shall be derived.

All Events are constructed with a reference to the object, the "source", that is logically deemed to be the object upon which the Event in question initially occurred upon.

Upvotes: 2

Bert F
Bert F

Reputation: 87533

Its ancient and simple, but you could use Observer/Obserable in java.util:

java.util

public class Observable extends Object

This class represents an observable object, or "data" in the model-view paradigm. It can be subclassed to represent an object that the application wants to have observed.

An observable object can have one or more observers. An observer may be any object that implements interface Observer. After an observable instance changes, an application calling the Observable's notifyObservers method causes all of its observers to be notified of the change by a call to their update method.

For more info, try http://www.javaworld.com/javaworld/jw-10-1996/jw-10-howto.html.

Upvotes: 4

Tom Hawtin - tackline
Tom Hawtin - tackline

Reputation: 147164

Swing is based upon AWT, so you have to mix it. The problem comes with mixing AWT heavyweight components with Swing lightweight components. Don't use AWT heavyweight components.

Just to be notified that something has changed javax.swing.event.ChangeListener is fine. In fact, so long as you are not using a library that assumes the beans model, you can ignore event classes and use a observer without an event object.

Upvotes: 0

z  -
z -

Reputation: 7168

If you are using swing, you can take a look at EventBus:

The Event Bus is a single-process publish/subscribe event routing library, with Swing extensions. The EventBus is fully-functional, with very good API documentation and test coverage (80+%). It has been deployed in many production environments, including financial, engineering and scientific applications.

Upvotes: 2

Michael Myers
Michael Myers

Reputation: 191925

There's nothing special about events in Java. If your events are not GUI events, then it would be less confusing for you to use your own class and not mix them with java.awt.Events.

Upvotes: 2

Related Questions