GWT - Gestione degli eventi
GWT fornisce un modello di gestore eventi simile ai framework Java AWT o SWING User Interface.
Un'interfaccia listener definisce uno o più metodi che il widget chiama per annunciare un evento. GWT fornisce un elenco di interfacce corrispondenti a vari eventi possibili.
Una classe che desidera ricevere eventi di un tipo particolare implementa l'interfaccia del gestore associata e quindi passa un riferimento a se stessa al widget per iscriversi a una serie di eventi.
Ad esempio, il file Button la classe pubblica click eventsquindi dovrai scrivere una classe per implementare ClickHandler da gestireclick evento.
Interfacce del gestore di eventi
Tutti i gestori di eventi GWT sono stati estesi dall'interfaccia EventHandler e ogni gestore ha un solo metodo con un singolo argomento. Questo argomento è sempre un oggetto del tipo di evento associato. Ognieventobject dispone di numerosi metodi per manipolare l'oggetto evento passato. Ad esempio per l'evento click dovrai scrivere il tuo gestore come segue:
/**
* 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!");
}
}
Ora qualsiasi classe che desideri ricevere eventi di clic chiamerà addClickHandler() per registrare un gestore di eventi come segue:
/**
* create button and attach click handler
*/
Button button = new Button("Click Me!");
button.addClickHandler(new MyClickHandler());
Ogni widget che supporta un tipo di evento avrà un metodo nella forma HandlerRegistration addFooGestore (FooEvento) dove Foo è l'evento reale come Click, Error, KeyPress ecc.
Di seguito è riportato l'elenco dei gestori di eventi GWT importanti, degli eventi associati e dei metodi di registrazione dei gestori:
Sr.No. | Interfaccia evento | Metodo e descrizione dell'evento |
---|---|---|
1 | Prima del gestore della selezione <I> | void on Before Selection (Before Selection Event<I> event); Chiamato quando BeforeSelectionEvent viene attivato. |
2 | BlurHandler | void on Blur(Blur Event event); Chiamato quando viene attivato Blur Event. |
3 | ChangeHandler | void on Change(ChangeEvent event); Chiamato quando viene generato un evento di modifica. |
4 | ClickHandler | void on Click(ClickEvent event); Chiamato quando viene attivato un evento clic nativo. |
5 | CloseHandler <T> | void on Close(CloseEvent<T> event); Chiamato quando viene attivato CloseEvent. |
6 | Gestore del menu contestuale | void on Context Menu(Context Menu Event event); Chiamato quando viene attivato un evento del menu contestuale nativo. |
7 | Gestore doppio clic | void on Double Click(Double Click Event event); Chiamato quando viene generato un evento di doppio clic. |
8 | Gestore degli errori | void on Error(Error Event event); Chiamato quando viene generato un evento di errore. |
9 | Gestore di messa a fuoco | void on Focus(Focus Event event); Chiamato quando viene attivato l'evento focus. |
10 | Pannello modulo Invia gestore completo | void on Submit Complete(Form Panel.Submit Complete Event event); Generato quando un modulo è stato inviato con successo. |
11 | FormPanel.SubmitHandler | void on Submit(Form Panel.Submit Event event); Licenziato quando viene inviato il modulo. |
12 | Key Down Handler | void on Key Down(Key Down Event event); Chiamato quando KeyDownEvent viene attivato. |
13 | KeyPressHandler | void on KeyPress(KeyPressEvent event); Chiamato quando KeyPressEvent viene attivato. |
14 | KeyUpHandler | void on KeyUp(KeyUpEvent event); Chiamato quando KeyUpEvent viene attivato. |
15 | LoadHandler | void on Load(LoadEvent event); Chiamato quando LoadEvent viene attivato. |
16 | MouseDownHandler | void on MouseDown(MouseDownEvent event); Chiamato quando viene attivato MouseDown. |
17 | MouseMoveHandler | void on MouseMove(MouseMoveEvent event); Chiamato quando MouseMoveEvent viene attivato. |
18 | MouseOutHandler | void on MouseOut(MouseOutEvent event); Chiamato quando MouseOutEvent viene attivato. |
19 | MouseOverHandler | void on MouseOver(MouseOverEvent event); Chiamato quando MouseOverEvent viene attivato. |
20 | MouseUpHandler | void on MouseUp(MouseUpEvent event); Chiamato quando MouseUpEvent viene attivato. |
21 | MouseWheelHandler | void on MouseWheel(MouseWheelEvent event); Chiamato quando MouseWheelEvent viene attivato. |
22 | ResizeHandler | void on Resize(ResizeEvent event); Attivato quando il widget viene ridimensionato. |
23 | ScrollHandler | void on Scroll(ScrollEvent event); Chiamato quando ScrollEvent viene attivato. |
24 | SelectionHandler <I> | void on Selection(SelectionEvent<I> event); Chiamato quando SelectionEvent viene attivato. |
25 | ValueChangeHandler <I> | void on ValueChange(ValueChangeEvent<I> event); Chiamato quando ValueChangeEvent viene attivato. |
26 | Window.ClosingHandler | void on WindowClosing(Window.ClosingEvent event); Attivato appena prima che la finestra del browser si chiuda o acceda a un sito diverso. |
27 | Window.ScrollHandler | void on WindowScroll(Window.ScrollEvent event); Attivato quando si scorre la finestra del browser. |
Metodi evento
Come accennato in precedenza, ogni gestore ha un singolo metodo con un singolo argomento che contiene l'oggetto evento, ad esempio void onClick (evento ClickEvent) o void onKeyDown (evento KeyDownEvent) . Gli oggetti evento come ClickEvent e KeyDownEvent hanno pochi metodi comuni elencati di seguito:
Sr.No. | Metodo e descrizione |
---|---|
1 | protected void dispatch(ClickHandler handler) Questo metodo dovrebbe essere chiamato solo da HandlerManager |
2 | DomEvent.Type <FooHandler> getAssociatedType() Questo metodo restituisce il tipo utilizzato per la registrazione Foo evento. |
3 | static DomEvent.Type<FooHandler> getType() Questo metodo ottiene il tipo di evento associato a Foo eventi. |
4 | public java.lang.Object getSource() Questo metodo restituisce l'origine che ha generato l'ultima volta questo evento. |
5 | protected final boolean isLive() Questo metodo restituisce se l'evento è in diretta. |
6 | protected void kill() Questo metodo uccide l'evento |
Esempio
Questo esempio ti guiderà attraverso semplici passaggi per mostrare l'utilizzo di un file Click Evento e KeyDownGestione degli eventi in GWT. Segui i seguenti passaggi per aggiornare l'applicazione GWT che abbiamo creato in GWT - Capitolo Crea applicazione -
Passo | Descrizione |
---|---|
1 | Crea un progetto con un nome HelloWorld sotto un pacchetto com.tutorialspoint come spiegato nel capitolo GWT - Crea applicazione . |
2 | Modifica HelloWorld.gwt.xml , HelloWorld.css , HelloWorld.html e HelloWorld.java come spiegato di seguito. Mantieni il resto dei file invariato. |
3 | Compilare ed eseguire l'applicazione per verificare il risultato della logica implementata. |
Di seguito è riportato il contenuto del descrittore del modulo modificato 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>
Di seguito è riportato il contenuto del file del foglio di stile modificato 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;
}
Di seguito è riportato il contenuto del file host HTML modificato 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>
Cerchiamo di avere il seguente contenuto del file Java src/com.tutorialspoint/HelloWorld.java che dimostrerà l'uso della gestione degli eventi in 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());
}
}
}
}
Una volta che sei pronto con tutte le modifiche apportate, compiliamo ed eseguiamo l'applicazione in modalità sviluppo come abbiamo fatto nel capitolo GWT - Crea applicazione . Se tutto va bene con la tua applicazione, questo produrrà il seguente risultato: