【译自:https://developers.google.com/web-toolkit/doc/latest/tutorial/manageevents?hl=zh-CN】
到此,我们已经创建了所有需要的UI控件。和许多其他的用户界面框架一样,GWT也是基于事件驱动的,也就是说代码会在响应某此发生的事件时被执行。经常,这些事件是由用户触发的,例如使用键盘或鼠标。
这一节,我们要给我们的控件添加鼠标和键盘响应事件。
一、审视事件处理需求
首先我们检查一下StockWatcher中哪些事件需要处理是:
Task | UI Event (Trigger mechanism) | Response |
用户输入股票代码 | 点击Add按钮或在文本框中按回车 |
|
用户删除股票 | 按下Remove按钮 |
|
GWT提供了一系列的事件处理接口。为了处理Add和Remove按钮事件,我们需要使用ClickHandler 接口;为了处理键盘事件,我们需要使用KeyPressHandler接口。
注:从GWT1.6开始, ClickHandler,KeyDownHandler,KeyPressHandler和KeyUpHandler接口已经替换了旧的ClickListener和KeyBoardListener接口了。
二、监听事件
Event Handler 接口
GWT中的事件接口和其他事件框架类似。要监听某一事件,需要传递一个特定的事件接口对象到相应的控件上。一个事件接口定义了一个或多个方法,可以被控件调用来处理某一事件。
处理Mouse Events
StockWatcher中,用户添加股票的方法之一就是用鼠标点击Add按钮。
通过传递一个实现了ClickHandler接口的对象,用户可以处理Add 按钮的点击事件。可能使用一个匿名内部类去实现ClickHandler接口。ClickHandler接口有一个onClick方法,当用户点击了控件时会触发它。
当用户点击了Add按钮,作为响应,StockWatcher就应该添加一条股票代码到股票表格里。因此,调用addStock方法去响应事件。不过我们还不需要实现addStock方法,先给一个架子,在下一节里我们会给出实现。
-
添加Add按钮的事件处理来接收事件在Stockwatcher.java的onModuleLoad方法,剪切和复杂以"Listen for mouse events on the Add button."注释的代码部分,也就是下面的高亮部分。Eclipse在ClickHandler会提示一个标记建议你导入所需的声明。
-
导入ClickHandler 和 ClickEvent.
-
在StockWatcher.java里,创建addStock方法的框架。
package com.google.gwt.sample.stockwatcher.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.user.client.ui.Button; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; 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 StockWatcher implements EntryPoint { private VerticalPanel mainPanel = new VerticalPanel(); private FlexTable stocksFlexTable = new FlexTable(); private HorizontalPanel addPanel = new HorizontalPanel(); private TextBox newSymbolTextBox = new TextBox(); private Button addStockButton = new Button("Add"); private Label lastUpdatedLabel = new Label(); /** * Entry point method. */ public void onModuleLoad() { // Create table for stock data. stocksFlexTable.setText(0, 0, "Symbol"); stocksFlexTable.setText(0, 1, "Price"); stocksFlexTable.setText(0, 2, "Change"); stocksFlexTable.setText(0, 3, "Remove"); // Assemble Add Stock panel. addPanel.add(newSymbolTextBox); addPanel.add(addStockButton); // Assemble Main panel. mainPanel.add(stocksFlexTable); mainPanel.add(addPanel); mainPanel.add(lastUpdatedLabel); // Associate the Main panel with the HTML host page. RootPanel.get("stockList").add(mainPanel); // Move cursor focus to the input box. newSymbolTextBox.setFocus(true); // Listen for mouse events on the Add button. addStockButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { addStock(); } }); } /** * Add stock to FlexTable. Executed when the user clicks the addStockButton or * presses enter in the newSymbolTextBox. */ private void addStock() { // TODO Auto-generated method stub } }
处理键盘事件
除了Add按钮,StockWatcher用户也可以通过按回车键添加一个股票代码,而不需要把手从键盘上移走。
为了订制一个键盘事件,我们需要调用addKeyPressHander(KeyPressHandler)方法,传入一个KeyPresshandler对象。
-
对输入框newSymbolTextBox添加keypress事件在onModuleLoad方法,复制和粘贴以"Listen for keyboard events in the input box."注释部分的代码。
// Listen for mouse events on the Add button. addStockButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { addStock(); } }); // Listen for keyboard events in the input box. newSymbolTextBox.addKeyPressHandler(new KeyPressHandler() { public void onKeyPress(KeyPressEvent event) { if (event.getCharCode() == KeyCodes.KEY_ENTER) { addStock(); } } }); } /** * Add stock to FlexTable. Executed when the user clicks the addStockButton or * presses enter in the newSymbolTextBox. */ private void addStock() { // TODO Auto-generated method stub } }
- 添加导入声明
import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyPressEvent; import com.google.gwt.event.dom.client.KeyPressHandler;
声事件处理已经添加完成,下一步就是完成addStock()方法
三、响应用户事件
到此,StockWatcher已经监听了用户输入。一个鼠标或键盘事件标明用户输入了一个股票代码。接下来就是通过响应事件来测试这些事件处理接口:添加股票代码。
StockWatcher不需要发送请求到服务器端或重新加载页面来响应请求。
添加股票到列表中
在StockWatcher中,用户输入它想监控的股票代码到输入框中。当它按下回车键或点击了Add按钮时,我们需要:
- 验证输入
- 检查重复
- 添加代码
- 添加删除按钮
这一节,我们先实现第一步:验证输入,用于检测事件处理接口是不是工作,下一节 Coding Functionality on the Client,会完成剩下的部分。
在addStock方法里实现这些功能。
验证输入
这里我们只验证输入是不是有效,而不验证它是不是一个存在的股票id。因此我们只做一个简单的字母检测。
- 首先提取股票代码
通过TextBox的getText()方法取得输入值 - 确保字母串中不包含非法字符
取得输入值后,使用一个正则表达式去检查是不是一个合法的输入。正则表达式在java和javascript中有相同的意义。 - 最后,如果输入无效,提示一个对话框
-
验证在StockWatcher.java中,以以下代码替换addStock方法:
private void addStock() { final String symbol = newSymbolTextBox.getText().toUpperCase().trim(); newSymbolTextBox.setFocus(true); // Stock code must be between 1 and 10 chars that are numbers, letters, or dots. if (!symbol.matches("^[0-9A-Z\\.]{1,10}$")) { Window.alert("'" + symbol + "' is not a valid symbol."); newSymbolTextBox.selectAll(); return; } newSymbolTextBox.setText(""); // TODO Don't add the stock if it's already in the table. // TODO Add the stock to the table. // TODO Add a button to remove this stock from the table. // TODO Get the stock price. }
-
添加导入
import com.google.gwt.user.client.Window;
四、测试事件处理
到此,我们已经能够在输入框中输入,如果使用了非法字符,则会有一个提示框出现:
-
在Development模式下测试在已经打开的浏览器里刷新
-
测试两种事件处理都工作输入股票代码,测试回车键和鼠标点击Add按钮。
现在股票还不会添加到列表中,但是输入框会清除,用户可以重新输入 -
测试验证和错误信息输入一些非法值
Tip: 在Development模式下,你们代码修改会立即生效,只需要在浏览器上刷新即可。你不需要重新启动应用
相关推荐
“GWT入门”和“GWT中文教程”显然是针对初学者的,它们可能从最基础的GWT安装、项目配置开始,逐步讲解GWT的核心概念,如UI设计(Widget系统)、事件处理、数据模型和服务器通信(RPC机制)、本地存储、国际化等。...
**Java开发人员的Ajax:Google Web Toolkit (GWT) 入门** Google Web Toolkit (GWT) 是一个强大的工具,它允许Java开发人员使用熟悉的Java语言来构建高性能、跨浏览器的Ajax应用程序。GWT通过将Java代码编译为优化...
本"gwt入门项目代码"是一个很好的起点,适合初学者了解和学习GWT和GXT框架。这个项目中,你可以期待找到以下几个关键的知识点: 1. **GWT的基础概念**:理解GWT如何将Java代码转换为跨浏览器兼容的JavaScript,以及...
### SmartGWT 入门详解 #### 一、SmartGWT 概述 **SmartGWT** 是一款基于 **Google Web Toolkit (GWT)** 的高级Web应用开发框架,旨在简化企业级Web 2.0应用的开发过程。自从 **GWT** 发布以来,它吸引了大量的...
### GWT入门 **1. 安装与配置** 首先,你需要下载GWT SDK,并在Eclipse或其他IDE中配置GWT插件。安装SDK后,创建一个新的GWT项目,包括设置模块文件.gwt.xml,定义项目的源代码路径和库依赖。 **2. 编写客户端代码...
GWT入门与经典实例解析源码提供了一个学习和实践GWT开发的宝贵资源,下面将详细介绍GWT的关键概念、核心特性以及通过实例解析来深入理解其工作原理。 1. **GWT的安装与设置**: 在开始GWT项目之前,你需要安装Java...
**GWT(Google Web Toolkit)入门与经典实例解析** GWT,全称为Google Web Toolkit,是Google推出的一...如果你手头有《GWT入门与经典实例解析》这本书,那么你将获得一份宝贵的资源,助你在GWT的学习旅程中更进一步。
以下是关于 GWT 入门的详细知识点: 1. **GWT 编译器**: GWT 的核心部分是其编译器,它能够将 Java 代码转换为浏览器可执行的 JavaScript。这使得开发者可以利用 Java 的强大功能和成熟的开发工具,同时享受 ...
《GWT入门及用例文档》 Ajax技术的兴起,为Web应用程序带来了革命性的变化,使得用户界面更加动态且交互性更强。Google Web Toolkit(GWT)是Google为解决Ajax应用开发难题而推出的神器,它允许开发者使用Java语言...
标题 "GWT入门实例" 指向的是Google Web Toolkit(GWT)的初学者教程。GWT 是一个开源的Java开发框架,它允许开发者使用Java语言来编写客户端的Web应用,然后自动编译成优化过的JavaScript代码。GWT通过提供丰富的...
**GWT 入门教程与实例解析** Google Web Toolkit(GWT)是Google推出的一款用于构建高性能、跨浏览器的Web应用程序的开源开发工具。它基于Java语言,通过编译Java源代码为JavaScript,使得开发者可以利用Java的强大...
GWT 入门介绍 GWT(Google Web Toolkit)是一种基于 Java 语言的开发工具和编程模型,用于编写 Rich Internet Applications(RIA)。GWT 允许开发者使用 Java 语言编写 UI 组件,然后通过 GWT Compiler 编译成 ...
同时,学习事件处理机制,以及如何进行数据绑定和状态管理。最后,了解GWT的开发模式和部署模式,以及如何在浏览器中运行和调试应用。 **进阶GWT:** 进阶GWT时,你需要深入理解GWT的异步通信机制,即RPC(Remote ...
**入门篇:理解GWT基础** 1. **环境搭建**:开始使用GWT,你需要安装Java Development Kit (JDK),然后下载GWT SDK,并配置相应的开发环境,如IntelliJ IDEA或Eclipse等集成开发环境的GWT插件。 2. **创建第一个...
**一、GWT入门** 在入门阶段,首先需要理解GWT的基本概念,包括模块系统、事件处理、UI构建和数据绑定。GWT的模块系统允许开发者将应用拆分为可重用的部分,而事件处理机制则使得用户交互变得简单。UI构建主要依赖于...
在GWT的实践中,"StockWatcher"是一个经典的入门示例,它通常用来教授GWT的基础知识。StockWatcher应用会模拟一个股票监视器,展示股票的价格变动。这个项目涉及到以下关键知识点: 1. **GWT SDK安装与设置**:首先...
**GWT(Google Web Toolkit)入门教程** GWT(Google Web Toolkit)是一个开源的Java开发框架,由Google推出,主要用于构建高性能、富交互式的Web应用程序。这个框架允许开发者使用Java语言编写前端代码,并自动...
GWT,全称为Google Web Toolkit,是Google推出的一款开源JavaScript开发框架,用于构建高性能的、富客户端的Web应用程序。这个初级到中高级的开发文档集合提供了全面的学习资源,旨在帮助开发者从零开始掌握GWT技术...
【GWT 开发手册轻松入门GWT】 Google Web Toolkit (GWT) 是一个开源的Java框架,用于构建和部署富互联网应用程序(RIA)。GWT允许开发者使用Java编写客户端代码,然后将其编译成优化的JavaScript,可在各种Web...