`
liugang594
  • 浏览: 981628 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【译】GWT入门:管理客户端事件

    博客分类:
  • GWT
 
阅读更多

【译自: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方法,先给一个架子,在下一节里我们会给出实现。

 

  1. 添加Add按钮的事件处理来接收事件
    在Stockwatcher.java的onModuleLoad方法,剪切和复杂以"Listen for mouse events on the Add button."注释的代码部分,也就是下面的高亮部分。
    Eclipse在ClickHandler会提示一个标记建议你导入所需的声明。
  2. 导入ClickHandler 和 ClickEvent.
  3. 在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对象。

 

  1. 对输入框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
    
      }
    
    }
  2. 添加导入声明
    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按钮时,我们需要:

  1. 验证输入
  2. 检查重复
  3. 添加代码
  4. 添加删除按钮

这一节,我们先实现第一步:验证输入,用于检测事件处理接口是不是工作,下一节 Coding Functionality on the Client,会完成剩下的部分。

在addStock方法里实现这些功能。

验证输入

这里我们只验证输入是不是有效,而不验证它是不是一个存在的股票id。因此我们只做一个简单的字母检测。

  1. 首先提取股票代码
    通过TextBox的getText()方法取得输入值
  2. 确保字母串中不包含非法字符
    取得输入值后,使用一个正则表达式去检查是不是一个合法的输入。正则表达式在java和javascript中有相同的意义。
  3. 最后,如果输入无效,提示一个对话框

 

  1. 验证
    在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.
    
      }
  2. 添加导入
    import com.google.gwt.user.client.Window;

四、测试事件处理

到此,我们已经能够在输入框中输入,如果使用了非法字符,则会有一个提示框出现:

  1. 在Development模式下测试
    在已经打开的浏览器里刷新
  2. 测试两种事件处理都工作
    输入股票代码,测试回车键和鼠标点击Add按钮。
    现在股票还不会添加到列表中,但是输入框会清除,用户可以重新输入
  3. 测试验证和错误信息
    输入一些非法值

Validation Error Message

Tip: 在Development模式下,你们代码修改会立即生效,只需要在浏览器上刷新即可。你不需要重新启动应用

 

分享到:
评论

相关推荐

    GWT入门 GWT中文教程

    “GWT入门”和“GWT中文教程”显然是针对初学者的,它们可能从最基础的GWT安装、项目配置开始,逐步讲解GWT的核心概念,如UI设计(Widget系统)、事件处理、数据模型和服务器通信(RPC机制)、本地存储、国际化等。...

    面向 Java 开发人员的 Ajax: Google Web Toolkit 入门(GWT入门)

    **Java开发人员的Ajax:Google Web Toolkit (GWT) 入门** Google Web Toolkit (GWT) 是一个强大的工具,它允许Java开发人员使用熟悉的Java语言来构建高性能、跨浏览器的Ajax应用程序。GWT通过将Java代码编译为优化...

    GWT入门教程+实例代码

    **GWT 入门教程与实例解析** Google Web Toolkit(GWT)是Google推出的一款用于构建高性能、跨浏览器的Web应用程序的开源开发工具。它基于Java语言,通过编译Java源代码为JavaScript,使得开发者可以利用Java的强大...

    gwt入门项目代码

    本"gwt入门项目代码"是一个很好的起点,适合初学者了解和学习GWT和GXT框架。这个项目中,你可以期待找到以下几个关键的知识点: 1. **GWT的基础概念**:理解GWT如何将Java代码转换为跨浏览器兼容的JavaScript,以及...

    GWT入门和进阶

    ### GWT入门 **1. 安装与配置** 首先,你需要下载GWT SDK,并在Eclipse或其他IDE中配置GWT插件。安装SDK后,创建一个新的GWT项目,包括设置模块文件.gwt.xml,定义项目的源代码路径和库依赖。 **2. 编写客户端代码...

    GWT入门与经典实例解析源码

    GWT入门与经典实例解析源码提供了一个学习和实践GWT开发的宝贵资源,下面将详细介绍GWT的关键概念、核心特性以及通过实例解析来深入理解其工作原理。 1. **GWT的安装与设置**: 在开始GWT项目之前,你需要安装Java...

    GWT入门与经典实例解析

    **GWT(Google Web Toolkit)入门与经典实例解析** GWT,全称为Google Web Toolkit,是Google推出的一...如果你手头有《GWT入门与经典实例解析》这本书,那么你将获得一份宝贵的资源,助你在GWT的学习旅程中更进一步。

    GWT入门实例

    标题 "GWT入门实例" 指向的是Google Web Toolkit(GWT)的初学者教程。GWT 是一个开源的Java开发框架,它允许开发者使用Java语言来编写客户端的Web应用,然后自动编译成优化过的JavaScript代码。GWT通过提供丰富的...

    GWT 入门介绍.doc

    GWT 入门介绍 GWT(Google Web Toolkit)是一种基于 Java 语言的开发工具和编程模型,用于编写 Rich Internet Applications(RIA)。GWT 允许开发者使用 Java 语言编写 UI 组件,然后通过 GWT Compiler 编译成 ...

    GWT入门,进阶,中级

    同时,学习事件处理机制,以及如何进行数据绑定和状态管理。最后,了解GWT的开发模式和部署模式,以及如何在浏览器中运行和调试应用。 **进阶GWT:** 进阶GWT时,你需要深入理解GWT的异步通信机制,即RPC(Remote ...

    GWT中文教程(入门进阶)

    **入门篇:理解GWT基础** 1. **环境搭建**:开始使用GWT,你需要安装Java Development Kit (JDK),然后下载GWT SDK,并配置相应的开发环境,如IntelliJ IDEA或Eclipse等集成开发环境的GWT插件。 2. **创建第一个...

    GWT入门中级高级教程,基础教程。全中文。pdf、ppt、word格式

    **一、GWT入门** 在入门阶段,首先需要理解GWT的基本概念,包括模块系统、事件处理、UI构建和数据绑定。GWT的模块系统允许开发者将应用拆分为可重用的部分,而事件处理机制则使得用户交互变得简单。UI构建主要依赖于...

    gwt 练习 gwt学习

    在GWT的实践中,"StockWatcher"是一个经典的入门示例,它通常用来教授GWT的基础知识。StockWatcher应用会模拟一个股票监视器,展示股票的价格变动。这个项目涉及到以下关键知识点: 1. **GWT SDK安装与设置**:首先...

    GWT入门教程

    **GWT(Google Web Toolkit)入门教程** GWT(Google Web Toolkit)是一个开源的Java开发框架,由Google推出,主要用于构建高性能、富交互式的Web应用程序。这个框架允许开发者使用Java语言编写前端代码,并自动...

    入门GWT.doc入门GWT.doc

    【GWT 入门】 Google Web Toolkit (GWT) 是一个强大的开发框架,它允许 Java 开发者使用熟悉的 Java 语言来构建高度交互的、基于Ajax的Web应用程序。GWT 解决了Ajax开发中常见的复杂性和调试难题,通过提供一套完整...

    GWT 初级入门,中高级应用 开发文档手册 api(全)

    GWT,全称为Google Web Toolkit,是Google推出的一款开源JavaScript开发框架,用于构建高性能的、富客户端的Web应用程序。这个初级到中高级的开发文档集合提供了全面的学习资源,旨在帮助开发者从零开始掌握GWT技术...

    gwt 开发手册轻松入门gwt

    【GWT 开发手册轻松入门GWT】 Google Web Toolkit (GWT) 是一个开源的Java框架,用于构建和部署富互联网应用程序(RIA)。GWT允许开发者使用Java编写客户端代码,然后将其编译成优化的JavaScript,可在各种Web...

    gwt入门学习基础(包括GWT组建,监听器如何使用)

    Gwt google web toolkit 网页开发工具,主要是把java自动转换成javaScript,能够在客户端响应,不存在卡机等待现象。适合于一些需要服务响应很久的网站程序开发

    GWT的入门实例和学习笔记

    这个压缩包文件包含两个重要的资源:一个“gwt的HelloWorld实例.doc”和“GWT学习笔记.doc”,它们是针对GWT初学者的理想入门资料。 “gwt的HelloWorld实例.doc”很可能是对GWT基本用法的直观展示。在GWT中,Hello...

    gwt技术入门

    总的来说,GWT技术入门需要理解GWT的架构、项目结构、模块配置、事件处理机制以及如何使用GWT工具链进行开发和部署。通过"Hello World"示例,开发者可以快速掌握GWT的基本操作,并以此为基础深入学习更复杂的GWT应用...

Global site tag (gtag.js) - Google Analytics