GWT - obsługa zdarzeń
GWT zapewnia model obsługi zdarzeń podobny do frameworków Java AWT lub SWING User Interface.
Interfejs nasłuchiwania definiuje jedną lub więcej metod, które widget wywołuje w celu ogłoszenia zdarzenia. GWT zawiera listę interfejsów odpowiadających różnym możliwym zdarzeniom.
Klasa, która chce odbierać zdarzenia określonego typu, implementuje powiązany interfejs modułu obsługi, a następnie przekazuje do widżetu odniesienie do siebie, aby zasubskrybować zestaw zdarzeń.
Na przykład Button klasa publikuje click eventswięc będziesz musiał napisać klasę, aby zaimplementować ClickHandler do obsługiclick zdarzenie.
Interfejsy obsługi zdarzeń
Wszystkie programy obsługi zdarzeń GWT zostały rozszerzone z interfejsu EventHandler , a każdy program obsługi ma tylko jedną metodę z jednym argumentem. Ten argument jest zawsze obiektem skojarzonego typu zdarzenia. Każdyeventobiekt ma kilka metod manipulowania przekazanym obiektem zdarzenia. Na przykład dla zdarzenia kliknięcia będziesz musiał napisać procedurę obsługi w następujący sposób -
/**
* 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!");
}
}
Teraz zadzwoni każda klasa, która chce otrzymywać zdarzenia kliknięcia addClickHandler() zarejestrować procedurę obsługi zdarzeń w następujący sposób -
/**
* create button and attach click handler
*/
Button button = new Button("Click Me!");
button.addClickHandler(new MyClickHandler());
Każdy widget obsługujący typ zdarzenia będzie miał metodę w postaci dodawania HandlerRegistrationFooTreser(FooWydarzenie) gdzie Foo to rzeczywiste zdarzenie, takie jak kliknięcie, błąd, naciśnięcie klawisza itp.
Poniżej znajduje się lista ważnych programów obsługi zdarzeń GWT i powiązanych zdarzeń oraz metod rejestracji modułu obsługi -
Sr.No. | Interfejs wydarzenia | Metoda i opis wydarzenia |
---|---|---|
1 | Przed programem obsługi wyboru <I> |
void on Before Selection (Before Selection Event<I> event); Wywoływana, gdy uruchamiany jest BeforeSelectionEvent. |
2 | BlurHandler |
void on Blur(Blur Event event); Wywoływana po uruchomieniu zdarzenia Blur. |
3 | ChangeHandler |
void on Change(ChangeEvent event); Wywoływane, gdy uruchamiane jest zdarzenie zmiany. |
4 | ClickHandler |
void on Click(ClickEvent event); Wywoływane po uruchomieniu zdarzenia kliknięcia natywnego. |
5 | CloseHandler <T> |
void on Close(CloseEvent<T> event); Wywoływana po uruchomieniu CloseEvent. |
6 | Program obsługi menu kontekstowego |
void on Context Menu(Context Menu Event event); Wywoływane, gdy uruchamiane jest zdarzenie natywnego menu kontekstowego. |
7 | Obsługa podwójnego kliknięcia |
void on Double Click(Double Click Event event); Wywoływane, gdy uruchamiane jest zdarzenie dwukrotnego kliknięcia. |
8 | Obsługa błędów |
void on Error(Error Event event); Wywoływane po uruchomieniu zdarzenia błędu. |
9 | Focus Handler |
void on Focus(Focus Event event); Wywoływane po uruchomieniu zdarzenia Focus. |
10 | Panel formularza. Prześlij kompletną obsługę |
void on Submit Complete(Form Panel.Submit Complete Event event); Uruchamiane po pomyślnym przesłaniu formularza. |
11 | FormPanel.SubmitHandler |
void on Submit(Form Panel.Submit Event event); Uruchamiane po przesłaniu formularza. |
12 | Key Down Handler |
void on Key Down(Key Down Event event); Wywoływana, gdy jest uruchamiany KeyDownEvent. |
13 | KeyPressHandler |
void on KeyPress(KeyPressEvent event); Wywoływana po uruchomieniu KeyPressEvent. |
14 | KeyUpHandler |
void on KeyUp(KeyUpEvent event); Wywoływane po uruchomieniu zdarzenia KeyUpEvent. |
15 | LoadHandler |
void on Load(LoadEvent event); Wywoływana po uruchomieniu LoadEvent. |
16 | MouseDownHandler |
void on MouseDown(MouseDownEvent event); Wywoływane po uruchomieniu MouseDown. |
17 | MouseMoveHandler |
void on MouseMove(MouseMoveEvent event); Wywoływana po uruchomieniu zdarzenia MouseMoveEvent. |
18 | MouseOutHandler |
void on MouseOut(MouseOutEvent event); Wywoływana po uruchomieniu zdarzenia MouseOutEvent. |
19 | MouseOverHandler |
void on MouseOver(MouseOverEvent event); Wywoływana po uruchomieniu zdarzenia MouseOverEvent. |
20 | MouseUpHandler |
void on MouseUp(MouseUpEvent event); Wywoływana po uruchomieniu zdarzenia MouseUpEvent. |
21 | MouseWheelHandler |
void on MouseWheel(MouseWheelEvent event); Wywoływana, gdy uruchamiany jest MouseWheelEvent. |
22 | ResizeHandler |
void on Resize(ResizeEvent event); Uruchamiany po zmianie rozmiaru widżetu. |
23 | ScrollHandler |
void on Scroll(ScrollEvent event); Wywoływana po uruchomieniu ScrollEvent. |
24 | SelectionHandler <I> |
void on Selection(SelectionEvent<I> event); Wywoływana po uruchomieniu SelectionEvent. |
25 | ValueChangeHandler <I> |
void on ValueChange(ValueChangeEvent<I> event); Wywoływana po uruchomieniu zdarzenia ValueChangeEvent. |
26 | Window.ClosingHandler |
void on WindowClosing(Window.ClosingEvent event); Uruchamiany tuż przed zamknięciem okna przeglądarki lub przejściem do innej witryny. |
27 | Window.ScrollHandler |
void on WindowScroll(Window.ScrollEvent event); Uruchamiane, gdy okno przeglądarki jest przewijane. |
Metody zdarzeń
Jak wspomniano wcześniej, każda procedura obsługi ma jedną metodę z jednym argumentem, który przechowuje obiekt zdarzenia, na przykład void onClick (zdarzenie ClickEvent) lub void onKeyDown (zdarzenie KeyDownEvent) . Obiekty zdarzeń, takie jak ClickEvent i KeyDownEvent, mają kilka typowych metod, które są wymienione poniżej -
Sr.No. | Metoda i opis |
---|---|
1 |
protected void dispatch(ClickHandler handler) Ta metoda powinna być wywoływana tylko przez HandlerManager |
2 |
DomEvent.Type <FooHandler> getAssociatedType() Ta metoda zwraca typ użyty do rejestracji Foo zdarzenie. |
3 |
static DomEvent.Type<FooHandler> getType() Ta metoda pobiera typ zdarzenia powiązany z Foo wydarzenia. |
4 |
public java.lang.Object getSource() Ta metoda zwraca źródło, które ostatnio wywołało to zdarzenie. |
5 |
protected final boolean isLive() Ta metoda zwraca informację, czy zdarzenie jest aktywne. |
6 |
protected void kill() Ta metoda zabija wydarzenie |
Przykład
Ten przykład poprowadzi Cię przez proste kroki, aby pokazać użycie pliku Click Wydarzenie i KeyDownObsługa zdarzeń w GWT. Wykonaj następujące kroki, aby zaktualizować aplikację GWT, którą utworzyliśmy w GWT - rozdział Tworzenie aplikacji -
Krok | Opis |
---|---|
1 | Utwórz projekt o nazwie HelloWorld pod pakietem com.tutorialspoint, jak wyjaśniono w rozdziale GWT - Tworzenie aplikacji . |
2 | Zmodyfikuj HelloWorld.gwt.xml , HelloWorld.css , HelloWorld.html i HelloWorld.java, jak wyjaśniono poniżej. Resztę plików nie zmieniaj. |
3 | Skompiluj i uruchom aplikację, aby zweryfikować wynik zaimplementowanej logiki. |
Poniżej znajduje się treść zmodyfikowanego deskryptora modułu 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>
Poniżej znajduje się zawartość zmodyfikowanego pliku arkusza stylów 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;
}
Poniżej znajduje się zawartość zmodyfikowanego pliku hosta HTML 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>
Miejmy następującą zawartość pliku Java src/com.tutorialspoint/HelloWorld.java który zademonstruje użycie obsługi zdarzeń w GWT.
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());
}
}
}
}
Gdy będziesz gotowy ze wszystkimi wprowadzonymi zmianami, skompilujmy i uruchom aplikację w trybie programistycznym, tak jak zrobiliśmy to w GWT - rozdział Tworzenie aplikacji . Jeśli wszystko jest w porządku z twoją aplikacją, da to następujący wynik -