6
votes

Manipulation de l'événement en Java

Comment soulever des événements personnalisés et gérer en Java. Certains liens seront utiles.

Merci.


3 commentaires

Vous devriez essayer d'élaborer un peu ce que vous êtes après. Quel genre d'événements? Il n'y a pas d'événements intrinsèques en Java, peut-être que vous êtes après?


Comme cette codeProject.com/kb/cs/csevents01.aspx


Oui, Roe. Je suis conscient que le lien pointe vers un article C #.


6 Réponses :


3
votes

Java n'a pas de soutien intégré aux délégués et aux événements tels que C #. Vous auriez besoin de mettre en œuvre le Observateur ou Publier / S'abonner Modèle vous-même.


0 commentaires

0
votes

Java n'a aucun support en langue pour la manipulation des événements. Mais il y a des classes qui peuvent aider. Vous pouvez regarder java.awt.event classe; java.awt.event et < Code> Java.Beans packages. Le premier package est une base pour la manipulation des événements dans les bibliothèques d'interface graphique AWT et Swing. Java.Beans Package contient des éléments de support pour Spécification des haricots Java , y compris des événements de changement de propriété et des événements contextuels de haricots.

Généralement, la manutention des événements est implémentée en fonction des modèles d'observateur ou de publication / souscription (comme mentionné par Kgiannakakis )


0 commentaires

15
votes

Il n'y a pas d'événements de première classe en Java. Toutes les manipulations d'événements sont effectuées à l'aide des interfaces et du modèle d'auditeur. Par exemple:

Button b = new Button();
b.addClickListener(new ClickListener() {
  public void clicked(ClickEvent e) {
    // handle event
  }
});


3 commentaires

Je suppose que l'événementListenerlist est juste une arrayliste typée de votre classe d'auditeur?


Nope, a trouvé que vous avez un getlisteners méthode - d'où vient cette classe?


télécharger.oracle.com/javase/6/ Docs / API / Javax / Swing / Event / ...



1
votes

1 commentaires

Hé, vous pouvez accepter votre propre réponse si c'est plus approprié que toute autre réponse



6
votes

Java manque de manipulation d'événements intrinsèques, mais il existe des bibliothèques pour vous aider à accomplir cela. Découvrez Javaeventing, http://code.google.com/p/javaeventing/ Cela fonctionne beaucoup comme dans C # où vous définissez d'abord vos événements, puis enregistrez les auditeurs d'événements. Vous déclenchez des événements avec EventManager.Triggerevent (.. SOMEVENT). Il vous permet de fournir des conditions personnalisées et des charges utiles avec vos événements également.

Bob


0 commentaires

2
votes

Si vous recherchez un événement de délégué de type .NET, je propose cette solution modélisée. Son avantage est qu'aucun moulage dur n'est requis et un auditeur pourrait mettre en œuvre plusieurs "événements" tant qu'ils utilisent différentes classes d'événements.

import java.util.EventListener;
import java.util.EventObject;
// replaces the .net delegate

public interface GenericEventListener<EventArgsType extends EventObject>
    extends EventListener {
    public void eventFired(EventArgsType e);
}

//------------------------------------------------

import java.util.EventObject;
import java.util.Vector;
// replaces the .net Event keyword

public class GenericEventSource<EventArgsType extends EventObject> {
    private Vector<GenericEventListener<EventArgsType>> listenerList =
        new Vector<GenericEventListener<EventArgsType>>();

    //TODO handle multi-threading lock issues
    public void addListener(GenericEventListener<EventArgsType> listener) {
        listenerList.add(listener);
    }

    //TODO handle multi-threading lock issues
    public void raise(EventArgsType e) {
        for (GenericEventListener<EventArgsType> listener : listenerList) {
            listener.eventFired(e);
        }
    }
}

//------------------------------------------------

// like a .net class extending EventArgs
public class MyCustomEventArgs extends EventObject {
    private int arg;
    public MyCustomEventArgs(Object source, int arg) {
        super(source);
        this.arg = arg;
    }
    public int getArg() {
        return arg;
    }
}

//------------------------------------------------

// replaces the .net event handler function. Can be put in a nested class, Java style
// Listener can handle several event types if they have different EventArg classes
public class MyCustomListener implements GenericEventListener<MyCustomEventArgs> {
    private Object source = null;
    private int arg;
    public void eventFired(MyCustomEventArgs e) {
        source = e.getSource();
        arg = e.getArg();
        // continue handling event...
    }
}

//------------------------------------------------

import GenericEventListener;
import GenericEventSource;
// this is the class that would like to throw events (e.g. MyButton)
public class MyCustomEventSource {
    // This is like declaring a .net public Event field of a specific delegate type
    GenericEventSource<MyCustomEventArgs> myEvent = new GenericEventSource<MyCustomEventArgs>();

    public GenericEventSource<MyCustomEventArgs> getEvent() {
        return myEvent;
    }
}

//------------------------------------------------

// Examples of using the event
MyCustomListener myListener1 = new MyCustomListener();
MyCustomEventSource mySource = new MyCustomEventSource();
mySource.getEvent().addListener( myListener1 );
mySource.getEvent().raise( new MyCustomEventArgs(mySource,5));


0 commentaires