GWT - Tratamento de Eventos
O GWT fornece um modelo de manipulador de eventos semelhante às estruturas Java AWT ou SWING User Interface.
Uma interface de ouvinte define um ou mais métodos que o widget chama para anunciar um evento. O GWT fornece uma lista de interfaces correspondentes a vários eventos possíveis.
Uma classe que deseja receber eventos de um tipo específico implementa a interface do manipulador associada e, em seguida, passa uma referência a si mesma para o widget para se inscrever em um conjunto de eventos.
Por exemplo, o Button classe publica click eventsentão você terá que escrever uma classe para implementar ClickHandler para lidar comclick evento.
Interfaces de manipulador de eventos
Todos os manipuladores de eventos GWT foram estendidos da interface EventHandler e cada manipulador tem apenas um único método com um único argumento. Este argumento é sempre um objeto do tipo de evento associado. Cadaeventobjeto tem vários métodos para manipular o objeto de evento passado. Por exemplo, para o evento de clique, você terá que escrever seu manipulador da seguinte forma -
/**
* 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!");
}
}
Agora, qualquer classe que deseje receber eventos de clique ligará addClickHandler() para registrar um manipulador de eventos da seguinte maneira -
/**
* create button and attach click handler
*/
Button button = new Button("Click Me!");
button.addClickHandler(new MyClickHandler());
Cada widget que suporta um tipo de evento terá um método da forma HandlerRegistration addFooHandler (FooEvento) onde Foo é o evento real, como Click, Error, KeyPress etc.
A seguir está a lista de importantes manipuladores de eventos GWT e eventos associados e métodos de registro de manipuladores -
Sr. Não. | Interface de Eventos | Método e descrição do evento |
---|---|---|
1 | Antes do manipulador de seleção <I> | void on Before Selection (Before Selection Event<I> event); Chamado quando BeforeSelectionEvent é disparado. |
2 | BlurHandler | void on Blur(Blur Event event); Chamado quando o Blur Event é disparado. |
3 | ChangeHandler | void on Change(ChangeEvent event); Chamado quando um evento de alteração é disparado. |
4 | ClickHandler | void on Click(ClickEvent event); Chamado quando um evento de clique nativo é disparado. |
5 | CloseHandler <T> | void on Close(CloseEvent<T> event); Chamado quando CloseEvent é disparado. |
6 | Manipulador de menu de contexto | void on Context Menu(Context Menu Event event); Chamado quando um evento de menu de contexto nativo é disparado. |
7 | Manipulador de duplo clique | void on Double Click(Double Click Event event); Chamado quando um evento de duplo clique é disparado. |
8 | Manipulador de Erros | void on Error(Error Event event); Chamado quando o evento de erro é disparado. |
9 | Focus Handler | void on Focus(Focus Event event); Chamado quando o Evento de foco é disparado. |
10 | Form Panel.Submit Complete Handler | void on Submit Complete(Form Panel.Submit Complete Event event); Disparado quando um formulário foi enviado com sucesso. |
11 | FormPanel.SubmitHandler | void on Submit(Form Panel.Submit Event event); Disparado quando o formulário é enviado. |
12 | Key Down Handler | void on Key Down(Key Down Event event); Chamado quando KeyDownEvent é disparado. |
13 | KeyPressHandler | void on KeyPress(KeyPressEvent event); Chamado quando KeyPressEvent é disparado. |
14 | KeyUpHandler | void on KeyUp(KeyUpEvent event); Chamado quando KeyUpEvent é disparado. |
15 | LoadHandler | void on Load(LoadEvent event); Chamado quando LoadEvent é disparado. |
16 | MouseDownHandler | void on MouseDown(MouseDownEvent event); Chamado quando MouseDown é disparado. |
17 | MouseMoveHandler | void on MouseMove(MouseMoveEvent event); Chamado quando MouseMoveEvent é disparado. |
18 | MouseOutHandler | void on MouseOut(MouseOutEvent event); Chamado quando MouseOutEvent é disparado. |
19 | MouseOverHandler | void on MouseOver(MouseOverEvent event); Chamado quando MouseOverEvent é disparado. |
20 | MouseUpHandler | void on MouseUp(MouseUpEvent event); Chamado quando MouseUpEvent é disparado. |
21 | MouseWheelHandler | void on MouseWheel(MouseWheelEvent event); Chamado quando MouseWheelEvent é disparado. |
22 | ResizeHandler | void on Resize(ResizeEvent event); Disparado quando o widget é redimensionado. |
23 | ScrollHandler | void on Scroll(ScrollEvent event); Chamado quando ScrollEvent é disparado. |
24 | SelectionHandler <I> | void on Selection(SelectionEvent<I> event); Chamado quando SelectionEvent é disparado. |
25 | ValueChangeHandler <I> | void on ValueChange(ValueChangeEvent<I> event); Chamado quando ValueChangeEvent é disparado. |
26 | Window.ClosingHandler | void on WindowClosing(Window.ClosingEvent event); Disparado pouco antes de a janela do navegador fechar ou navegar para um site diferente. |
27 | Window.ScrollHandler | void on WindowScroll(Window.ScrollEvent event); Disparado quando a janela do navegador é rolada. |
Métodos de Evento
Conforme mencionado anteriormente, cada manipulador tem um único método com um único argumento que contém o objeto de evento, por exemplo void onClick (evento ClickEvent) ou void onKeyDown (evento KeyDownEvent) . Os objetos de evento como ClickEvent e KeyDownEvent têm alguns métodos comuns que estão listados abaixo -
Sr. Não. | Método e Descrição |
---|---|
1 | protected void dispatch(ClickHandler handler) Este método só deve ser chamado por HandlerManager |
2 | DomEvent.Type <FooHandler> getAssociatedType() Este método retorna o tipo usado para registrar Foo evento. |
3 | static DomEvent.Type<FooHandler> getType() Este método obtém o tipo de evento associado a Foo eventos. |
4 | public java.lang.Object getSource() Este método retorna a fonte que disparou este evento pela última vez. |
5 | protected final boolean isLive() Este método retorna se o evento é ao vivo. |
6 | protected void kill() Este método mata o evento |
Exemplo
Este exemplo irá guiá-lo através de etapas simples para mostrar o uso de um Click Evento e KeyDownTratamento de eventos no GWT. Siga as etapas a seguir para atualizar o aplicativo GWT que criamos no GWT - capítulo Criar aplicativo -
Degrau | Descrição |
---|---|
1 | Crie um projeto com o nome HelloWorld em um pacote com.tutorialspoint conforme explicado no capítulo GWT - Criar aplicativo . |
2 | Modifique HelloWorld.gwt.xml , HelloWorld.css , HelloWorld.html e HelloWorld.java conforme explicado abaixo. Mantenha o resto dos arquivos inalterados. |
3 | Compile e execute o aplicativo para verificar o resultado da lógica implementada. |
A seguir está o conteúdo do descritor do módulo modificado 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>
A seguir está o conteúdo do arquivo de folha de estilo modificado 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;
}
A seguir está o conteúdo do arquivo host HTML modificado 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>
Vamos ter o seguinte conteúdo do arquivo Java src/com.tutorialspoint/HelloWorld.java que demonstrará o uso de Manipulação de eventos no 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());
}
}
}
}
Quando você estiver pronto com todas as alterações feitas, vamos compilar e rodar o aplicativo em modo de desenvolvimento como fizemos no capítulo GWT - Criar Aplicativo . Se tudo estiver bem com sua aplicação, isso produzirá o seguinte resultado -