让GWT的FlexTable支持双击(double click)
关键字: ajaxEach 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);
}
}
发表评论
- 浏览: 215194 次
- 性别:

- 来自: 广州

- 详细资料
搜索本博客
我的相册
共 13 张
最近加入圈子
最新评论
-
使用Terracotta和Tomcat建 ...
"运行start.bat 9081 这样我们就启动了目录9081中的tomcat ...
-- by renavatior -
广州3年多经验 5500的 ...
fucku 写道广州的软件厂家可比深圳多多了,不过比起北京上海来,还是少了很多, ...
-- by yongfan_420 -
广州3年多经验 5500的 ...
广州的软件厂家可比深圳多多了,不过比起北京上海来,还是少了很多,导致机会也没有这 ...
-- by fucku -
广州3年多经验 5500的 ...
想高工资就去厂家咯,老在集成商里面混能有多大个奔头
-- by fucku -
广州3年多经验 5500的 ...
active1001 写道eddie404956 写道active1001 写道 ...
-- by mayu






评论排行榜