`
shiren1118
  • 浏览: 133897 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

GWT教程之 增加事件监听器

    博客分类:
  • gwt
阅读更多

<!----><!----> <!-- /* Font Definitions */ @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"\@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-bidi-font-family:"Times New Roman"; mso-font-kerning:1.0pt; mso-bidi-language:AR-SA;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:1981036278; mso-list-template-ids:2046095588;} @list l0:level1 {mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:36.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} --> <!---->

GWT教程之

增加事件监听器

和许多UI 框架一样,GWT 是基于事件驱动的。这意味着所以代码的执行要由其他事件做出响应。常常该事件由用户来触发,使用鼠标或键盘和应用程序接口来交互。

监听接口

在你响应一个事件之初,你先要告诉GWT 你对哪种类型的事件感兴趣。这称为事件注册。为注册一个事件,你需要给应用程序窗口指定一个特殊的监听器。当它发生的时候来声明一个事件,此监听器定义了一个或多个稍后要调用的方法。从窗口的视角来看,我们说窗口触发了一个可以前往任何监听器的事件。

注册事件

GWT 中,可以使用很多不同的接口。例如,ClickListener 接口就是一个简单的单击事件的事件监听器。它仅仅包含了一个方法,onClick(Widget) 。当用户点击一个窗口声明单击事件的时候就会调用该方法。这样的窗口可以是一个Button   类。下面通过实践来弄清它,让我们返回到StockWatcher 例子中。在增加库存清单上我们已经建了一个按钮。现在我们通过调用ClickListener 接口来处理它的单击click 事件。

为此我们需要在适当的位置添加addClickListener(ClickListener) 的监听器。让我们继续在onModuleLoad() 方法中调用上面那个方法:

public void onModuleLoad() {

  // 设定库存类表的显示

  stocksFlexTable.setText(0, 0, "Symbol");

  stocksFlexTable.setText(0, 1, "Price");

  stocksFlexTable.setText(0, 2, "Change");

  stocksFlexTable.setText(0, 3, "Remove");

 

  // 为新增库存设定事件监听器

  addButton.addClickListener(new ClickListener() {

    public void onClick(Widget sender) {

      addStock();

    }

  });

 

  // 放到库存面板上。

  addPanel.add(newSymbolTextBox);

  addPanel.add(addButton);

 

  // assemble main panel

  mainPanel.add(stocksFlexTable);

  mainPanel.add(addPanel);

  mainPanel.add(lastUpdatedLabel);

 

  // HTML 元素id"stockList" 处嵌入主面板  RootPanel.get("stockList").add(mainPanel);

   

  // 将光标置于text box

  newSymbolTextBox.setFocus(true);

}

 

private void addStock() {

  // 当用户点击按钮时的执行的代码

}

你也需要在StockWatcher.java 头部增加2import 语句:

import com.google.gwt.user.client.ui.ClickListener;

import com.google.gwt.user.client.ui.Widget;

你可能注意到我们使用的实现ClickListener 的是匿名内部类。其内部定义了onClick(Widget)   方法,委托给一个新方法addStock() 。实际上。addStock() 才是我们验证库存符号和增加试图列表起作用的。

对于小一点的应用程序来说仅需要处理一些数目很小的相关的事件,这时使用匿名内部类足以完成这些小问题。但如果我们要对大量窗口注册事件,这种方法就没效率了,因为它导致了过多的独立监听器对象被创建。在这种情况下,对多个事件源来说指定包含的类实现监听器接口和使用独立的接口方法是比较好的方式。当窗口调用方法的时候,建议发送参数,这样你就可以知道哪个触发了该事件。这可以有效的使用内存但可能会多些代码,比如下面的例子:

public class ListenerExample extends Composite implements ClickListener {

  private FlowPanel fp = new FlowPanel();

  private Button b1 = new Button("Button 1");

  private Button b2 = new Button("Button 2");

 

  public ListenerExample() {

    initWidget(fp);

    fp.add(b1);

    fp.add(b2);

    b1.addClickListener(this);

    b2.addClickListener(this);

  }

 

  public void onClick(Widget sender) {

    if (sender == b1) {

      // handle b1 being clicked

    } else if (sender == b2) {

      // handle b2 being clicked

    }

  }

}

监听器适配器

现在回到StockWatcher 例子中. 如果我们在下部分中实现了addStock() 方法,用户就可以点击按钮来增加库存信息到列表中。为了方便起见,我们可以允许用户在newSymbolTextBox 内部使用键盘或通过敲击Enter 回车。为了达到这个目的,我们需要注册newSymbolTextBox's 的键盘事件通过KeyboardListener   中的addKeyboardListener(KeyboardListener) 方法。

查看KeyboardListener 接口,我们可以看出它包含了3 个监听方法:

在我们的例子中这好像太强大了,:我们只需要onKeyDown(Widget, char, int) 监听方法。我们需要一个类来允许我们绑定这个特殊的我们感兴趣的事件,忽略其他的。这也证明,GWT 为此目的建立了适配器类。Adapters 是简单的,空的,确定的一个特殊事件接口的实现。仅子类有适配器类,并对你想要注册的事件提供实现。

StockWatcher 例子中, 我们实现了 KeyboardListenerAdapter   接口 并且重写了onKeyDown(Widget, char, int)   方法. 增加import:

import com.google.gwt.user.client.ui.KeyboardListenerAdapter;

之后在onModuleLoad() 方法中增加调用 addKeyboardListener(KeyboardListener) 具体如下:

// set up event listeners for adding a new stock

addButton.addClickListener(new ClickListener() {

  public void onClick(Widget sender) {

    addStock();

  }

});

 

newSymbolTextBox.addKeyboardListener(new KeyboardListenerAdapter() {

  @Override

  public void onKeyDown(Widget sender, char keyCode, int modifiers) {

    if (keyCode == KEY_ENTER) {

      addStock();

    }

  }

});

 

// assemble Add Stock panel

addPanel.add(newSymbolTextBox);

addPanel.add(addButton);

 

现在我们的事件监听器已整装待发,当我们要处理事件的时候,下一步将需要填写我们那个空的 addStock() 方法来增加库存信息到列表中。

 

 

 

分享到:
评论
1 楼 diggywang 2010-02-15  
翻译的还行,只是有一个到处存在的错误,stock不是“存货”,而是“股票”

相关推荐

    GWT中文教程(入门进阶)

    4. **事件处理**:GWT中的事件模型基于DOM事件,你可以为Widget绑定事件监听器,处理用户交互。 5. **CSS样式**:GWT支持内联CSS和外部CSS样式表,可以通过Java代码动态修改样式,实现富客户端界面的定制。 6. **...

    gwt 练习 gwt学习

    你可以通过添加事件监听器来响应用户的点击、键盘输入等操作。 6. **RPC通信**:GWT的Remote Procedure Call (RPC)机制使得客户端和服务器之间能进行数据交换。在StockWatcher中,可能需要一个服务接口来获取实时...

    smartgwt最新版本GWT的DEMO

    3. **事件处理**:DEMO会演示如何注册事件监听器,处理用户交互,如点击、选择、提交等事件。 4. **样式和主题**:SmartGWT提供了一套完整的主题系统,可以在DEMO中看到如何切换和定制不同的界面风格。 5. **异步...

    gwt-ext培训教程

    在GWT-Ext中,可以通过监听器接口来处理用户交互事件,例如点击按钮、选择列表项等。事件处理机制使得代码更加模块化,提高了代码的可读性和可复用性。 5. **Ajax和异步通信** GWT-Ext利用GWT的RPC机制进行服务器...

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

    通过事件监听器和事件对象,你可以实现复杂的交互逻辑。 5. **异步通信 - RPC**: GWT通过Remote Procedure Call(RPC)技术实现客户端与服务器端的数据交换。了解如何定义服务接口、创建服务代理以及处理服务回调...

    smartgwt官方实例

    实例中展示了如何注册事件监听器、处理用户交互和触发的事件,这对于理解SmartGWT的事件模型非常有帮助。 4. **布局管理**:SmartGWT提供了多种布局管理器,如VLayout、HLayout、FormLayout等,用于组织和排列组件...

    gwt之分页控件

    在这个“gwt之分页控件”的主题中,我们将深入探讨GWT中如何实现高效且用户友好的分页功能。 首先,我们需要理解GWT的基本工作原理。GWT将Java代码编译成JavaScript,使得开发者可以在浏览器环境中运行Java应用,而...

    Gwt Designer 开发实例一

    通过GWT Designer,你可以直观地设计Composite的布局,实时预览效果,并且方便地添加事件监听器。 2. **CSS支持**: CSS(Cascading Style Sheets)在GWT应用中用于控制用户界面的样式和布局。GWT Designer 提供了...

    gwt实例,基于gwt-windows-1.5.2

    3. **事件处理**:GWT支持事件驱动编程,允许你为UI组件添加事件监听器,处理用户的交互行为。例如,点击按钮触发一个函数,提交表单等。 4. **数据绑定**:GWT的Data Binding机制使你可以方便地将UI组件的状态与...

    GWT API帮助文档

    2. **事件处理(Event Handling)**: GWT通过事件监听器接口(如ClickHandler、BlurHandler等)使事件处理变得简单。开发者可以方便地添加和移除监听器,实现对用户交互的响应。 3. **异步通信(RPC)**: GWT的...

    gwt 之dualListField (drag and drop)

    7. **事件处理**:添加必要的事件监听器,如OnChange事件,以便在用户交互后能响应其他业务逻辑。 8. **测试和优化**:确保在不同浏览器和设备上都具有良好的兼容性和性能,必要时进行优化。 在提供的...

    GWTDemo

    4. **事件处理**: GWT支持事件驱动编程,开发者可以通过添加事件监听器来响应用户的操作。例如,点击按钮触发特定的业务逻辑。 5. **异步通信 - RPC (Remote Procedure Call)**: GWT 提供了RPC机制,使得客户端可以...

    SmartGwt学习文档

    此外,理解和运用SmartGwt的布局管理器也是关键,它能帮助你创建灵活多变的界面布局,适应不同屏幕尺寸和设备。 智能表单处理是SmartGwt的一个亮点,它提供了一套完整的表单组件和验证机制,方便开发者创建复杂的...

    GWTAPI文档 + GWTEXT文档 + GWTEXTUX文档

    4. **事件处理**:GWT提供了一套完整的事件模型,包括事件监听、事件冒泡和事件分发机制。 5. **异步通信**:通过RemoteProcedureCall(RPC)实现服务器端和客户端之间的数据交换,同时支持JSON、XML等多种数据格式...

    gwt 实现的一个简单计算器

    - **事件处理**:GWT的事件处理机制允许开发者为UI组件绑定事件监听器,例如点击按钮触发计算操作。 - **业务逻辑**:计算器的核心是计算逻辑,这部分通常包含在Java类中,处理输入数据、执行运算并返回结果。 - ...

    GWT 简单实例,包括添加/删除/修改/查询数据

    开发者可以通过实现事件监听器接口或者使用匿名内部类来响应这些事件。例如,在这个实例中,可能会有按钮的点击事件触发数据的添加、删除或修改。 2. **GWT自定义组件**:GWT提供了一系列内置的UI组件,如Button、...

    gwt 中实现简单的树状菜单

    - 通常,我们会为每个TreeItem设置一个Widget(如Label、Hyperlink等)作为其显示内容,并在需要时添加事件监听器。 ```java TreeItem childItem = new TreeItem(new Label("子节点内容")); childItem....

    Gwt-ext学习笔记

    3. **事件处理**:学习如何注册事件监听器,处理用户交互,如点击按钮、选择列表项等。 4. **Ajax通信**:GWT的RPC机制与Gwt-ext相结合,可以方便地进行异步服务器通信,获取或提交数据。 5. **主题和皮肤**:Gwt-...

    GWT-Events.pdf

    2. **主类实现监听器接口**:在这种情况下,主控件类会直接实现监听器接口,将事件处理逻辑内嵌到主类中。这种方式虽然简化了代码结构,但可能使主类变得过于臃肿,不易于扩展和维护。 3. **命名内部类**:命名内部...

Global site tag (gtag.js) - Google Analytics