`
dengyin2000
  • 浏览: 1228406 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

让GWT的FlexTable支持双击(double click)

    博客分类:
  • gwt
阅读更多

Each event has a set of browser events that fires it.  For example take

a look at the source of the HTMLTable Class in the gwt-user jar.  It
has the following constructor:

  public HTMLTable() {
    tableElem = DOM.createTable();
    bodyElem = DOM.createTBody();
    DOM.appendChild(tableElem, bodyElem);
    setElement(tableElem);
    sinkEvents(Event.ONCLICK);
  }

Basically, it is "sinking" only the ONCLICK event, and will ignore all
other events.   To &apossink' and event just means to react to any firings
of that event.  A full list of the various events are listed here:

http://code.google.com/webtoolkit/documentation/com.google.gwt.user.c...

So, for example, if you wanted the tableto respond to ONDBLCLICK
events, all you need to do is extend the class of the table you want to

use (let&aposs say FlexTable), so you would make the class:

public class HappyTable extends FlexTable {
        public HappyTable(){
                super();
                addTableListener(this);
                sinkEvents(Event.ONCLICK | Event.ONDBLCLICK |
Event.ONKEYDOWN);
        }
...

 

}

What this code is doing, is telling the table to react to click, double

click, and key press events.  In the same code youwould create an
onBrowser event method which would define what you want to do:

public void onBrowserEvent(Event event) {
                // Find out which cell was actually clicked.
                Element td = getEventTargetCell(event);
                if (td == null) {
                        return;
                }
                Element tr = DOM.getParent(td);
                Element body = DOM.getParent(tr);
                int row = DOM.getChildIndex(body, tr);
                int column = DOM.getChildIndex(tr, td);
                switch (DOM.eventGetType(event)) {
                case Event.ONCLICK: {
                        if (this.tableListeners != null) {
                                // Fire the event.
                                tableListeners.fireCellClicked(this,
row, column);
                        }
                        break;

                }
                case Event.ONDBLCLICK: {
                        if (this.tableListeners != null) {
                                // Fire the event.
                                tableListeners.fireCellDblClicked(this,
row, column);
                        }
                        break;
                }
                case Event.ONKEYDOWN: {
                        if (DOM.eventGetKeyCode(event) == KEY_UP) {
                                // Fire the event.
                                tableListeners.fireUpKey(this);
                        }
                        else if (DOM.eventGetKeyCode(event) ==
KEY_DOWN) {
                                // Fire the event.
                                tableListeners.fireDownKey(this);
                        }
                        break;
                }
                default: {
                        // Do nothing
                }

                }
        }

Because I was doing a variety of things with the table I created my own

listener interface, and listener collection which included double
clicks, but this is not necessary for simpler things.  Here it is
anyway (note that this implements all of clicks, dblclicks, and up/down

keys):

public interface HappyTableListener extends TableListener{

        public void onCellDblClicked(SourcesTableEvents sender, int
row, int
cell);
        public void onUpKey(SourcesTableEvents sender);
        public void onDownKey(SourcesTableEvents sender);

 

}

public class MyTableListenerCollection extends Vector {

        public void fireCellClicked(SourcesTableEvents sender, int row,
int
cell) {
                for (Iterator it = iterator(); it.hasNext();) {
                        MyTableListener listener = (MyTableListener)
it.next();
                        listener.onCellClicked(sender, row, cell);
                }
        }

        public void fireCellDblClicked(SourcesTableEvents sender, int
row, int
cell) {
                for (Iterator it = iterator(); it.hasNext();) {
                        MyTableListener listener = (MyTableListener)
it.next();
                        listener.onCellDblClicked(sender, row, cell);
                }
        }

        public void fireUpKey(SourcesTableEvents sender) {
                for (Iterator it = iterator(); it.hasNext();) {
                        MyTableListener listener = (MyTableListener)
it.next();
                        listener.onUpKey(sender);
                }
        }
        public void fireDownKey(SourcesTableEvents sender) {
                for (Iterator it = iterator(); it.hasNext();) {
                        MyTableListener listener = (MyTableListener)
it.next();
                        listener.onDownKey(sender);
                }
        }

详细请看:http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/861b1cb22c8423c3/fcaf84884d8d3d13?lnk=gst&q=table+row+double+click&rnum=1#fcaf84884d8d3d13

分享到:
评论
1 楼 ellie4c 2008-04-27  
你的双击事件是不是会同时触发 两次单机哪?
这个你遇到没有?

相关推荐

    gwt实例,基于gwt-windows-1.5.2

    6. **本地存储**:GWT也支持客户端的本地数据存储,如使用`History`和`Cookie`进行页面状态管理和用户数据持久化。 7. **国际化与本地化**:GWT提供了i18n(国际化)支持,允许你创建多语言的应用。 8. **GWT正则...

    gwt 练习 gwt学习

    1. **GWT SDK安装与设置**:首先,你需要下载并安装GWT SDK,配置IDE(如Eclipse或IntelliJ IDEA)以支持GWT项目开发。 2. **模块化(GWT Module)**:每个GWT项目都始于一个`.gwt.xml`模块文件,它定义了项目的...

    GWT

    5. **异步通信**:GWT支持异步的服务器通信(Asynchronous JavaScript and XML,AJAX),使得用户界面更加响应式,提高了用户体验。 6. **可访问性**:GWT提供了对Web标准的支持,如WAI-ARIA,帮助创建可访问性和...

    GWT入门 GWT中文教程

    “GWT快速开发”这部分教程则专注于提高开发效率,可能包含了GWT的开发工具、IDE集成、代码生成、调试技巧等内容,让开发者能快速上手并高效地进行GWT项目开发。 “GWT入门”和“GWT中文教程”显然是针对初学者的,...

    gwt 分页控件封装

    **FlexTable** 是GWT中的一个布局组件,它可以动态调整大小并支持行和列的添加、删除和调整。在实现分页控件时,FlexTable可能被用来显示数据,因为它提供了灵活的布局和样式控制,适合构建用户界面元素如表格。 **...

    GWT快速开发(GWT) 是一个Java软件开发框架用于开发类似于Google Maps和Gmail的AJAX应用程序。GWT的设计参考Java AWT包设计,类命名规则、接口设计、事件监听等。你可以用Java编程语言开发你的界面,然后用GWT编译器将Java类转换成适合浏览器执行的...

    - 安装GWT Eclipse Plugin,以便更好地支持GWT项目的创建、编译和调试。 - 可以通过Eclipse的市场(Install New Software)安装GWT Plugin。 #### 三、GWT开发基础 1. **基本概念**: - **模块(Module)**: GWT项目...

    GWT开发环境JAVA

    5. **国际化的支持**:GWT提供了多语言支持,方便应用的全球化。 6. **优化的性能**:GWT的编译器通过各种优化技术,如Dead Code Elimination和Code Splitting,提高应用的运行效率。 7. **强大的社区支持**:GWT...

    GWT初学者手册

    2. **跨浏览器支持**:GWT设计了一个架构,能够在单一代码基础上支持多种浏览器,减少了处理浏览器兼容性问题的困扰。 3. **模块系统(Module)**:GWT允许定义模块,方便组织和管理项目。 二、语言特性的支持与...

    GWT完整教程,Word版

    你将学习如何使用GWT的布局管理器,如CellWidget、FlexTable和DockLayoutPanel,来更好地组织和控制用户界面元素。此外,会探讨异步通信的进一步应用,如使用RequestBuilder进行RESTful通信,以及GWT的本地存储和...

    GWT开发手册.doc

    - **Java语言特性**:GWT支持大部分Java语言特性,如异常处理、断言等,但也有部分限制,如不支持多线程、同步操作、反射和严格浮点运算。对于Java的某些类型,如long会被映射为JavaScript的双精度浮点数。在异常...

    smartgwt最新版本GWT的DEMO

    GWT的核心优势在于它的跨浏览器兼容性、强大的性能优化以及对Ajax技术的支持。 SmartGWT则是在GWT的基础上,增加了大量预先封装好的UI组件和实用工具类,包括表格、图表、日历、对话框等,大大减轻了开发者的工作...

    gwt 2.1.0 工具下载

    4. **异步通信**:GWT支持异步的服务器端通信,通过使用GWT的RequestBuilder或GWT-RPC,可以实现无刷新的数据更新,提高了用户体验。 5. **模块化**:GWT 2.1.0支持模块化开发,开发者可以通过模块化组织项目,每个...

    GWT-API.rar

    GWT支持多语言环境,允许开发者轻松地为应用添加不同地区的语言支持。 8. **响应式设计**: 随着移动设备的普及,GWT也提供了响应式设计的支持,使应用能在不同屏幕尺寸和设备上正常工作。 9. **社区与生态**: ...

    GWT操作数据库例子

    首先,让我们详细了解GWT。GWT提供了丰富的UI组件库,如表格、按钮、输入框等,以及异步通信机制,使得Web应用能够与服务器进行高效的交互。在这个例子中,GWT可能被用来创建一个用户界面,展示从数据库检索的数据。...

    GWT入门和进阶

    GWT允许开发者使用Java语言编写代码,然后自动编译为优化过的JavaScript,使得开发者能够利用Java的强大功能同时享受到JavaScript在Web端的广泛支持。 ### GWT入门 **1. 安装与配置** 首先,你需要下载GWT SDK,并...

    smartgwt官方实例

    2. **数据绑定**:SmartGWT支持自动的数据绑定,使得UI组件可以与后台数据源(如数据库或Web服务)进行交互。通过实例,你可以学习如何实现数据的动态加载、更新和保存。 3. **事件处理**:事件驱动编程是GUI开发的...

    GWT开发者手册(中文版)

    - **反射与序列化**:GWT不支持Java的反射机制,也不支持标准的序列化机制,而是提供了一个RPC机制来处理对象的序列化和反序列化。 - **垃圾回收**:由于JavaScript环境的限制,GWT无法提供与Java类似的垃圾回收机制...

    gwt揭秘源代码

    在GWT应用中,通常会使用混淆技术来保护代码不被轻易反编译,而"unseal"可能就是解除这种保护,让开发者能更直观地理解编译后的代码结构。 GWT的主要特点包括: 1. **Java到JavaScript的编译**:GWT编译器将Java...

Global site tag (gtag.js) - Google Analytics