Cómo generar eventos personalizados y gestionarlos en Java. Algunos enlaces serán útiles.Gestión de elevación de eventos en Java
Gracias.
Cómo generar eventos personalizados y gestionarlos en Java. Algunos enlaces serán útiles.Gestión de elevación de eventos en Java
Gracias.
Los siguientes ligados me ayudó a entender.
http://www.javaworld.com/javaworld/javaqa/2002-03/01-qa-0315-happyevent.html
Oye, puedes aceptar tu propia respuesta si es más apropiada que cualquier otra respuesta – yesraaj
Esto es similar: http://www.exampledepot.com/egs/java.util/custevent.html –
Java no tiene soporte integrado para delegados y eventos como C#. Debería implementar el patrón Observer o Publish/Subscribe usted mismo.
Java no tiene soporte en el idioma para el manejo de eventos. Pero hay algunas clases que pueden ayudar. Puede mirar la clase java.awt.Event
; java.awt.event
y java.beans
paquetes. El primer paquete es una base para el manejo de eventos en las bibliotecas AWT y Swing GUI. El paquete java.beans
contiene material de apoyo para Java Beans specification, incluidos eventos de cambio de propiedad y eventos de contexto de frijol.
En general, el control de eventos se implementa según Observador o de publicación/suscripción patrones (como se ha mencionado por kgiannakakis)
No hay eventos de primera clase en Java. Todo el manejo de eventos se realiza usando interfaces y patrón de escucha. Por ejemplo:
// Roughly analogous to .NET EventArgs
class ClickEvent extends EventObject {
public ClickEvent(Object source) {
super(source);
}
}
// Roughly analogous to .NET delegate
interface ClickListener extends EventListener {
void clicked(ClickEvent e);
}
class Button {
// Two methods and field roughly analogous to .NET event with explicit add and remove accessors
// Listener list is typically reused between several events
private EventListenerList listenerList = new EventListenerList();
void addClickListener(ClickListener l) {
clickListenerList.add(ClickListener.class, l)
}
void removeClickListener(ClickListener l) {
clickListenerList.remove(ClickListener.class, l)
}
// Roughly analogous to .net OnEvent protected virtual method pattern -
// call this method to raise the event
protected void fireClicked(ClickEvent e) {
ClickListener[] ls = listenerList.getListeners(ClickEvent.class);
for (ClickListener l : ls) {
l.clicked(e);
}
}
}
código de cliente normalmente utiliza clases internas anónimas a registrar manejadores:
Button b = new Button();
b.addClickListener(new ClickListener() {
public void clicked(ClickEvent e) {
// handle event
}
});
Java carece de eventos intrínsecos manipulación, pero hay bibliotecas para ayudar a lograr esto. Consulte javaEventing, http://code.google.com/p/javaeventing/ Funciona de la misma manera que en C# donde primero define sus eventos y luego registra los detectores de eventos. Dispara eventos utilizando EventManager.triggerEvent (.. someEvent). Le permite proporcionar condiciones personalizadas y cargas útiles con sus eventos también.
Bob
Si usted está buscando un evento de tipo .NET delegado, propongo esta solución de plantilla. Es una ventaja que no se requieren moldes duros, y un oyente podría implementar varios "eventos" siempre que utilicen diferentes clases de eventos.
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));
Debería intentar elaborar un poco sobre lo que está buscando. ¿Qué tipo de eventos? No hay eventos intrínsecos en Java, tal vez lo que busca son excepciones. – falstro
¿Te refieres a los eventos AWT? –
Me gusta esto http://www.codeproject.com/KB/cs/csevents01.aspx – bdhar