Event Handler

Status
Nicht offen für weitere Antworten.

Anyone

Mitglied
Kann ich einen EventDispatcher und EventHandler verwenden, die dann z.B. bei fehlgeschlagene Logins ein spezifisches GUI Fenster anzeigen? Z.B. OnLogin, OnInvalidLogin, etc.? Ich möchte mein Projekt nämlich so registrieren, dass jede Aktion (die z.B. durch einen Klick auf einen Button) einen entsprechenden EventHandler hat. Ist das plausibel?
 

KrokoDiehl

Top Contributor
Ganz verstehen tue ich das nicht, aber Event-Handling in Swing (SWT weiß ich nicht) funktioniert über Listener. Klicks auf einen Button werden z.B. via ActionListener behandelt. Analog geht es für andere Ereignisse wie Fokuswechsel, Mausklicks, Tastatureingaben...
Man kann zwar auch eine eigene EventQueue machen, aber das halte ich nur in sehr speziellen Fällen für angebracht.
Meine Ansicht: Beschreibe einmal genauer was du vorhast / beabsichtigst, dann können wir dir eher sagen, wie man es mit Listenern etc. machen kann.
 

Anyone

Mitglied
Also ich habe mir das folgendermaßen vorgestellt (provisorisches Beispiel):

Java:
public class GUI extends Frame
{
    private class LoginActionListener implements ActionListener
    {
          if (ConceptionLayer.isValidLogin())
          {
                EventDispatcher.invoke("onLogin");
          } 
          else
          {
                EventDispatcher.invoke("onInvalidLogin");
          }
    }
}

In PHP beispielsweise wird dieses Konzept häufig angewendet und scheint sich auch durchgesetzt zu haben. Ob dieses auch in Java der Fall ist kann ich nicht einschätzen.
 

javimka

Top Contributor
wo wird dieser LoginActionListener denn angehängt und wie funktioniert das genau mit EventDispatcher.invoke("onLogin");
? Also ich bin ein bisschen skeptisch, ob das eine gute Java-Lösung ist. Besser wäre es doch, wenn dein Listener ein Event erhält, in dem steht, ob das Login geglückt ist oder nicht und der Listener dann entsprechend reagiert. Du willst doch nicht alles public static machen oder?
 

Anyone

Mitglied
Ich kann ja mal eine gängige und professionelle PHP-Lösung versuchen in Java umzusetzen:

Java:
public interface EventHandler
{
    public void handleEvent(Event event);
}

Java:
public class Event<T>
{
    private String name;
    private <T>context;
    private String info;
    private boolean cancelled = false;
    
    public function Event(String name, <T>context = null, String info = null)
    {
        this.name = name;
        this.context = context;
        this.info = info;
    }
    
    public String getName()
    {
        return this.name;
    }
    
    public <T> getContext()
    {
        return this.context;
    }
    
    public String getInfo()
    {
        return this.info;
    }
    
    public boolean isCancelled()
    {
        return this.cancelled;
    }
    
    public void cancel()
    {
        this.cancelled = true;
    }
}

Java:
public class EventDispatcher<T>
{
    private static EventDispatcher instance = null;
    private List<EventHandler> eventHandlers = new ArrayList<EventHandler>();
    
    public static EventDispatcher getInstance()
    {
        if (EventDispatcher.instance == null)
        {
            EventDispatcher.instance = new EventDispatcher();
        }
        
        return EventDispatcher.instance;
    }
    
    public void addHandler(String eventName, EventHandler handler)
    {
         // Hier werden neue EventHandler hinzugefügt
    }
    
    public Event triggerEvent(Event event, <T>context = null, String info = null)
    {
        if (!event instanceof Event)
        {
            Event event = new Event(event, context, info);
        }
        
        String eventName = event.getName();
        
        // Falls kein Handler mit dem Namen eventName vorhanden ist, wird event
        
        foreach (this.eventHandlers[eventName] as handler)
        {
            handler.handle(event);
            if (event.isCancelled())
            {
                break;
            }
        }
        
        return event;
    }
    
    protected void __construct() {}
    private void __clone() {}
}

?>

So, ich habe nun ein beispielhaftes EventSystem von PHP auf Java übertragen. Da ich leider nicht sonderlich bewandert bin mit Java wollte ich euch fragen, ob dieses System in Bezug auf Java Sinn macht?
 

javimka

Top Contributor
Den EventDispatcher hat Java doch bereits. Ist es nicht möglich, eine Java-Lösung zu verwenden? Ich sehe noch nicht so ganz ein, wer deine Events denn triggern soll.
Möglicherweise erzähle ich dir jetzt nichts Neues, aber ich würde dem Button, der gedrückt werden muss einen ActionListener anhängen [actionPerformed(ActionEvent event) überschreiben], der dann den Login-Vorgang startet. Möglicherweise in einem neuen Thread. Dieser Vorgang sollte dann die entsprechenden weiteren Mechanismen starten, z.B. ein neues JPanel erzeugen, falls das Login geglückt ist oder eine rote Fehlermeldung ausgeben, falls nicht.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Key-Event-Sender Allgemeine Java-Themen 5
E Datei verschoben Event Allgemeine Java-Themen 3
D Event Sourcing umsetzen Was? Wie? Allgemeine Java-Themen 33
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
FrittenFritze Problem mit einer JComboBox, Event temporär deaktivieren Allgemeine Java-Themen 11
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
M Best Practice Alternativen für Event-Handling Allgemeine Java-Themen 3
C Zugriff auf Event felder Allgemeine Java-Themen 0
Bananabert Interface Custom 'Event' mit Interface Allgemeine Java-Themen 10
das-mo Warten auf Event Allgemeine Java-Themen 7
K Event benutzen Allgemeine Java-Themen 4
F None-GUI-Event Handling Allgemeine Java-Themen 3
D mouseMove in mouseMotionListener-Event Allgemeine Java-Themen 3
R Klasse über Button Event in anderer Klasse informieren Allgemeine Java-Themen 11
K event dispatch thread fehler. Compiler meckert nicht aber der Interpreter? Warum?? Allgemeine Java-Themen 11
A Relative Mausposition ohne Event Allgemeine Java-Themen 2
V Priorität der Event-Handlings setzen Allgemeine Java-Themen 4
algorismi int-variable Value Change event Allgemeine Java-Themen 3
slawaweis Suche Klassen für Event Managment und Time Allgemeine Java-Themen 2
B Window Closing Event Allgemeine Java-Themen 3
H Event ähnliches System Allgemeine Java-Themen 20
G XML Event --> Befüllen einer Node Allgemeine Java-Themen 2
Q Dateizugriff mitbekommen - file change event Allgemeine Java-Themen 13
W eigene event-Klasse, event posten Allgemeine Java-Themen 2
M Speichern von Word als Event abfangen Allgemeine Java-Themen 7
P Event-Handling mit JSP Allgemeine Java-Themen 7
MQue public void serialEvent(SerialPortEvent event) Allgemeine Java-Themen 4
E Wie: Eigener Listener, eigenes Event (möglichst einfach) Allgemeine Java-Themen 29
MQue Button Event beim drücken und beim auslassen Allgemeine Java-Themen 7
T OutputStream - Event bei Byte-Fluss Allgemeine Java-Themen 5
E Button: Event auslösen Allgemeine Java-Themen 7
B event kunstlich auslösen Allgemeine Java-Themen 8
R Dasselbe Event zweimal aufgefangen? Allgemeine Java-Themen 10
D Thread durch Mouse-Event beenden Allgemeine Java-Themen 5
I Listener/Event selber machen. Allgemeine Java-Themen 4
S methode stoppen / auf ein event warten Allgemeine Java-Themen 5
G Key Event Allgemeine Java-Themen 2
B Thread soll auf Event warten, dann Daten an Klasse senden Allgemeine Java-Themen 2
G konsolenanwendung durch key event beenden Allgemeine Java-Themen 4
M Event Queues in Java? Allgemeine Java-Themen 10
G Problem Canvas Mouse Event Allgemeine Java-Themen 7
J ToolTipText Event abfangen Allgemeine Java-Themen 5
A Endlosschleife + Event Allgemeine Java-Themen 7
G EHM EVENT handling ? Allgemeine Java-Themen 5
C Menü & event Allgemeine Java-Themen 4
C event weiterreichen Allgemeine Java-Themen 3
T CP Problem: Webstart + Logging properties file + eigener Handler Allgemeine Java-Themen 7
P fehlende Mehrfachvererbung logging.Handler impl. Observable Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben