GWT - Ereignisbehandlung
GWT bietet ein Event-Handler-Modell, das Java AWT- oder SWING-Benutzeroberflächen-Frameworks ähnelt.
Eine Listener-Schnittstelle definiert eine oder mehrere Methoden, die das Widget aufruft, um ein Ereignis anzukündigen. GWT bietet eine Liste von Schnittstellen, die verschiedenen möglichen Ereignissen entsprechen.
Eine Klasse, die Ereignisse eines bestimmten Typs empfangen möchte, implementiert die zugehörige Handler-Schnittstelle und übergibt dann einen Verweis auf sich selbst an das Widget, um eine Reihe von Ereignissen zu abonnieren.
Zum Beispiel die Button Klasse veröffentlicht click eventsSie müssen also eine Klasse schreiben, um ClickHandler für die Verarbeitung zu implementierenclick Veranstaltung.
Event-Handler-Schnittstellen
Alle GWT-Ereignishandler wurden über die EventHandler- Schnittstelle erweitert, und jeder Handler verfügt nur über eine einzige Methode mit einem einzigen Argument. Dieses Argument ist immer ein Objekt des zugeordneten Ereignistyps. JedereventObjekt verfügt über eine Reihe von Methoden zum Bearbeiten des übergebenen Ereignisobjekts. Zum Beispiel müssen Sie für ein Klickereignis Ihren Handler wie folgt schreiben:
/**
* create a custom click handler which will call
* onClick method when button is clicked.
*/
public class MyClickHandler implements ClickHandler {
@Override
public void onClick(ClickEvent event) {
Window.alert("Hello World!");
}
}
Jetzt ruft jede Klasse an, die Klickereignisse erhalten möchte addClickHandler() um einen Event-Handler wie folgt zu registrieren:
/**
* create button and attach click handler
*/
Button button = new Button("Click Me!");
button.addClickHandler(new MyClickHandler());
Jedes Widget, das einen Ereignistyp unterstützt, verfügt über eine Methode der Form HandlerRegistration addFooHandler (FooEreignis) wo Foo ist das eigentliche Ereignis wie Click, Error, KeyPress etc.
Im Folgenden finden Sie eine Liste wichtiger GWT-Ereignishandler und zugehöriger Ereignisse sowie Registrierungsmethoden für Handler.
Sr.Nr. | Ereignisschnittstelle | Ereignismethode & Beschreibung |
---|---|---|
1 | Vor dem Auswahlhandler <I> |
void on Before Selection (Before Selection Event<I> event); Wird aufgerufen, wenn BeforeSelectionEvent ausgelöst wird. |
2 | BlurHandler |
void on Blur(Blur Event event); Wird aufgerufen, wenn das Unschärfeereignis ausgelöst wird. |
3 | ChangeHandler |
void on Change(ChangeEvent event); Wird aufgerufen, wenn ein Änderungsereignis ausgelöst wird. |
4 | ClickHandler |
void on Click(ClickEvent event); Wird aufgerufen, wenn ein natives Klickereignis ausgelöst wird. |
5 | CloseHandler <T> |
void on Close(CloseEvent<T> event); Wird aufgerufen, wenn CloseEvent ausgelöst wird. |
6 | Kontextmenü-Handler |
void on Context Menu(Context Menu Event event); Wird aufgerufen, wenn ein natives Kontextmenüereignis ausgelöst wird. |
7 | Doppelklicken Sie auf Handler |
void on Double Click(Double Click Event event); Wird aufgerufen, wenn ein Doppelklickereignis ausgelöst wird. |
8 | Fehlerbehandlungsroutine |
void on Error(Error Event event); Wird aufgerufen, wenn das Fehlerereignis ausgelöst wird. |
9 | Fokus-Handler |
void on Focus(Focus Event event); Wird aufgerufen, wenn das Fokusereignis ausgelöst wird. |
10 | Form Panel.Submit Complete Handler |
void on Submit Complete(Form Panel.Submit Complete Event event); Wird ausgelöst, wenn ein Formular erfolgreich gesendet wurde. |
11 | FormPanel.SubmitHandler |
void on Submit(Form Panel.Submit Event event); Wird ausgelöst, wenn das Formular gesendet wird. |
12 | Key Down Handler |
void on Key Down(Key Down Event event); Wird aufgerufen, wenn KeyDownEvent ausgelöst wird. |
13 | KeyPressHandler |
void on KeyPress(KeyPressEvent event); Wird aufgerufen, wenn KeyPressEvent ausgelöst wird. |
14 | KeyUpHandler |
void on KeyUp(KeyUpEvent event); Wird aufgerufen, wenn KeyUpEvent ausgelöst wird. |
15 | LoadHandler |
void on Load(LoadEvent event); Wird aufgerufen, wenn LoadEvent ausgelöst wird. |
16 | MouseDownHandler |
void on MouseDown(MouseDownEvent event); Wird aufgerufen, wenn MouseDown ausgelöst wird. |
17 | MouseMoveHandler |
void on MouseMove(MouseMoveEvent event); Wird aufgerufen, wenn MouseMoveEvent ausgelöst wird. |
18 | MouseOutHandler |
void on MouseOut(MouseOutEvent event); Wird aufgerufen, wenn MouseOutEvent ausgelöst wird. |
19 | MouseOverHandler |
void on MouseOver(MouseOverEvent event); Wird aufgerufen, wenn MouseOverEvent ausgelöst wird. |
20 | MouseUpHandler |
void on MouseUp(MouseUpEvent event); Wird aufgerufen, wenn MouseUpEvent ausgelöst wird. |
21 | MouseWheelHandler |
void on MouseWheel(MouseWheelEvent event); Wird aufgerufen, wenn MouseWheelEvent ausgelöst wird. |
22 | ResizeHandler |
void on Resize(ResizeEvent event); Wird ausgelöst, wenn die Größe des Widgets geändert wird. |
23 | ScrollHandler |
void on Scroll(ScrollEvent event); Wird aufgerufen, wenn ScrollEvent ausgelöst wird. |
24 | SelectionHandler <I> |
void on Selection(SelectionEvent<I> event); Wird aufgerufen, wenn SelectionEvent ausgelöst wird. |
25 | ValueChangeHandler <I> |
void on ValueChange(ValueChangeEvent<I> event); Wird aufgerufen, wenn ValueChangeEvent ausgelöst wird. |
26 | Window.ClosingHandler |
void on WindowClosing(Window.ClosingEvent event); Wird ausgelöst, kurz bevor das Browserfenster geschlossen wird oder zu einer anderen Site navigiert. |
27 | Window.ScrollHandler |
void on WindowScroll(Window.ScrollEvent event); Wird ausgelöst, wenn das Browserfenster gescrollt wird. |
Ereignismethoden
Wie bereits erwähnt, verfügt jeder Handler über eine einzelne Methode mit einem einzelnen Argument, das das Ereignisobjekt enthält, z. B. void onClick (ClickEvent-Ereignis) oder void onKeyDown (KeyDownEvent-Ereignis) . Die Ereignisobjekte wie ClickEvent und KeyDownEvent verfügen über einige gängige Methoden, die unten aufgeführt sind:
Sr.Nr. | Methode & Beschreibung |
---|---|
1 |
protected void dispatch(ClickHandler handler) Diese Methode sollte nur von HandlerManager aufgerufen werden |
2 |
DomEvent.Type <FooHandler> getAssociatedType() Diese Methode gibt den zur Registrierung verwendeten Typ zurück Foo Veranstaltung. |
3 |
static DomEvent.Type<FooHandler> getType() Diese Methode ruft den Ereignistyp ab, der zugeordnet ist Foo Veranstaltungen. |
4 |
public java.lang.Object getSource() Diese Methode gibt die Quelle zurück, die dieses Ereignis zuletzt ausgelöst hat. |
5 |
protected final boolean isLive() Diese Methode gibt zurück, ob das Ereignis aktiv ist. |
6 |
protected void kill() Diese Methode beendet das Ereignis |
Beispiel
Dieses Beispiel führt Sie durch einfache Schritte, um die Verwendung von a zu zeigen Click Veranstaltung und KeyDownEreignisbehandlung in GWT. Führen Sie die folgenden Schritte aus, um die GWT-Anwendung zu aktualisieren, die wir in GWT - Kapitel " Anwendung erstellen" erstellt haben.
Schritt | Beschreibung |
---|---|
1 | Erstellen Sie ein Projekt mit dem Namen HelloWorld unter einem Paket com.tutorialspoint, wie im Kapitel GWT - Anwendung erstellen erläutert . |
2 | Ändern Sie HelloWorld.gwt.xml , HelloWorld.css , HelloWorld.html und HelloWorld.java wie unten erläutert. Halten Sie den Rest der Dateien unverändert. |
3 | Kompilieren Sie die Anwendung und führen Sie sie aus, um das Ergebnis der implementierten Logik zu überprüfen. |
Es folgt der Inhalt des modifizierten Moduldeskriptors src/com.tutorialspoint/HelloWorld.gwt.xml.
<?xml version = "1.0" encoding = "UTF-8"?>
<module rename-to = 'helloworld'>
<!-- Inherit the core Web Toolkit stuff. -->
<inherits name = 'com.google.gwt.user.User'/>
<!-- Inherit the default GWT style sheet. -->
<inherits name = 'com.google.gwt.user.theme.clean.Clean'/>
<!-- Specify the app entry point class. -->
<entry-point class = 'com.tutorialspoint.client.HelloWorld'/>
<!-- Specify the paths for translatable code -->
<source path = 'client'/>
<source path = 'shared'/>
</module>
Im Folgenden finden Sie den Inhalt der geänderten Stylesheet-Datei war/HelloWorld.css.
body {
text-align: center;
font-family: verdana, sans-serif;
}
h1 {
font-size: 2em;
font-weight: bold;
color: #777777;
margin: 40px 0px 70px;
text-align: center;
}
Es folgt der Inhalt der geänderten HTML-Hostdatei war/HelloWorld.html.
<html>
<head>
<title>Hello World</title>
<link rel = "stylesheet" href = "HelloWorld.css"/>
<script language = "javascript" src = "helloworld/helloworld.nocache.js">
</script>
</head>
<body>
<h1>Event Handling Demonstration</h1>
<div id = "gwtContainer"></div>
</body>
</html>
Lassen Sie uns folgenden Inhalt der Java-Datei haben src/com.tutorialspoint/HelloWorld.java Dies wird die Verwendung der Ereignisbehandlung in GWT demonstrieren.
package com.tutorialspoint.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.event.dom.client.KeyDownHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DecoratorPanel;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
public class HelloWorld implements EntryPoint {
public void onModuleLoad() {
/**
* create textbox and attach key down handler
*/
TextBox textBox = new TextBox();
textBox.addKeyDownHandler(new MyKeyDownHandler());
/*
* create button and attach click handler
*/
Button button = new Button("Click Me!");
button.addClickHandler(new MyClickHandler());
VerticalPanel panel = new VerticalPanel();
panel.setSpacing(10);
panel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
panel.setSize("300", "100");
panel.add(textBox);
panel.add(button);
DecoratorPanel decoratorPanel = new DecoratorPanel();
decoratorPanel.add(panel);
RootPanel.get("gwtContainer").add(decoratorPanel);
}
/**
* create a custom click handler which will call
* onClick method when button is clicked.
*/
private class MyClickHandler implements ClickHandler {
@Override
public void onClick(ClickEvent event) {
Window.alert("Hello World!");
}
}
/**
* create a custom key down handler which will call
* onKeyDown method when a key is down in textbox.
*/
private class MyKeyDownHandler implements KeyDownHandler {
@Override
public void onKeyDown(KeyDownEvent event) {
if(event.getNativeKeyCode() == KeyCodes.KEY_ENTER){
Window.alert(((TextBox)event.getSource()).getValue());
}
}
}
}
Wenn Sie mit allen vorgenommenen Änderungen fertig sind, lassen Sie uns die Anwendung im Entwicklungsmodus kompilieren und ausführen, wie wir es im Kapitel GWT - Anwendung erstellen getan haben . Wenn mit Ihrer Anwendung alles in Ordnung ist, führt dies zu folgendem Ergebnis: