Events
Komponenten, egal ob benutzerdefiniert oder Teil des Frameworks, unterstützen die Ereignisbehandlung. Sie können Ereignislistener hinzufügen, um verschiedene Arten von Ereignissen zu erfassen, wie z.B. Benutzerinteraktionen, Änderungen des Zustands oder andere benutzerdefinierte Ereignisse. Diese Ereignislistener können verwendet werden, um spezifische Aktionen oder Verhaltensweisen als Reaktion auf die Ereignisse auszulösen.
Im folgenden Beispiel wird ein Ereignis mit jedem der drei unterstützten Methoden hinzugefügt: Lambda-Ausdrücke, anonyme Klassen und Methodenreferenzen.
Hinzufügen von Ereignissen
Das Hinzufügen eines Ereignislisteners ist möglich, indem eines der folgenden Muster verwendet wird, wobei:
-
myComponentdie Komponente ist, an die Sie den Ereignislistener anfügen möchten. -
addEventListenerdurch die ereignisspezifische Methode ersetzt wird. -
EventListenerdurch den Typ des Ereignisses ersetzt wird, auf das gehört wird.
myComponent.addEventListener(e -> {
// Wird ausgeführt, wenn das Ereignis ausgelöst wird
});
//ODER
myComponent.addEventListener(new ComponentEventListener<EventListener>() {
@Override
public void onComponentEvent(ComponentEvent e){
// Wird ausgeführt, wenn das Ereignis ausgelöst wird
}
});
//ODER
myComponent.addEventListener(this::eventMethod);
Zusätzliche syntaktische Zucker-Methoden oder Aliase wurden hinzugefügt, um eine alternative Hinzufügung von Ereignissen durch Verwendung des on-Präfixes gefolgt vom Ereignis zu ermöglichen, wie zum Beispiel:
myComponent.onEvent(e -> {
// Wird ausgeführt, wenn das Ereignis ausgelöst wird
});
Entfernen eines Ereignisses
Beim Hinzufügen eines Ereignislisteners wird ein ListenerRegistration-Objekt zurückgegeben. Dieses kann unter anderem verwendet werden, um das Ereignis später zu entfernen.
//Ereignis hinzufügen
ListenerRegistration listenerRegistration = myComponent.addEventListener(e -> {
// Wird ausgeführt, wenn das Ereignis ausgelöst wird
});
//Ereignis entfernen
listenerRegistration.remove();
Verwendung der Ereignislast
Es ist wichtig zu beachten, dass Ereignisse oft eine Last haben, die zusätzliche Informationen zum Ereignis enthält. Sie können diese Last innerhalb des Ereignishandlers effizient nutzen, um auf relevante Daten zuzugreifen, ohne unnötige Rückfragen zwischen dem Client und dem Server zu stellen. Dadurch können Sie die Leistung Ihrer Anwendung verbessern.
Der folgende Code-Schnipsel fragt die Komponente ab, um Informationen zu erhalten, die zu Demonstrationszwecken bereits in der Ereignislast enthalten sind und ineffizienten Code darstellen:
myComponent.addEventListener(e -> {
// Greifen Sie auf Daten von der Komponente zu
String componentText = e.getComponent().getText();
//ODER wenn die Komponente innerhalb des Geltungsbereichs der Funktion zugänglich ist
String componentText = myComponent.getText();
// Verwenden Sie componentText, um andere Aktionen auszuführen.
});
Stattdessen wird durch die Nutzung der Last der Methode, die zum Zweck des Beispiels den Text der Komponente beinhaltet, eine Rückfrage vermieden:
myComponent.addEventListener(e -> {
// Greifen Sie auf Daten aus der Ereignislast zu
String componentText = e.getText();
// Verwenden Sie componentText, um andere Aktionen auszuführen.
});
Dieser Ansatz minimiert die Notwendigkeit, die Komponente nach Informationen zu fragen, da die Daten in der Ereignislast sofort verfügbar sind. Durch die Befolgung dieser effizienten Ereignisbehandlungspraktiken können Sie die Leistung und Reaktionsfähigkeit Ihrer Komponenten verbessern. Für weitere Informationen können Sie auf Client/Server-Interaktion verweisen.
Beispiel
Im Folgenden finden Sie eine Demonstration, die das Hinzufügen eines ButtonClickEvent zu einem Button zeigt. Dieser Button verwendet ebenfalls Informationen, die mit der Last des Ereignisses geliefert werden, um Informationen auf dem Bildschirm anzuzeigen.
Code anzeigen
- ButtonEventView.java