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

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&apos 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值