如何将行侦听器添加到特定行或表中的所有行?我需要在行中添加一种“onMouSEOver”监听器,这样当你将鼠标悬停在它们上面时,它会改变行的背景颜色,就像getRowFormatter允许你做的那样.
... . . 如何将行侦听器添加到特定行或表中的所有行?我需要在行中添加一种“onMouSEOver”监听器,这样当你将鼠标悬停在它们上面时,它会改变行的背景颜色,就像getRowFormatter允许你做的那样..
解决方法
. 假设GWT 1.5.3:
点击事件处理
如果您正在使用FlexTable并且需要单击事件处理程序,则可以使用FlexTable.addTableListener()
并注册自己的TableListener
.TableListener对象将需要实现onCellClicked回调,它将为您提供行号.
其他事件处理(例如HOVER)
如果您需要处理除click(例如,悬停)之外的其他类型的事件,GWT当前没有就绪接口.你自己几乎要自己实现它们.我现在可以想到有两种方法:
>快速而肮脏的方式,可能是利用JSNI,它为您提供了一种将Javascript注入GWT代码的方法.在我的代码中,我没有使用太多的JSNI(除了真正难以在纯GWT中编写它的努力方法),所以我不能给你一个例子;但坦率地说,我不建议这样做,因为它会降低可维护性和可扩展性.
>如果您需要本机GWT接口,则可以创建一个继承HTMLTable或FlexTable的新类.在构造函数中,使用您需要的事件调用sinkEvents
函数. (例如,对于悬停,你可能需要sinkEvents(Event.ONMOUSEOVER)).然后你需要处理鼠标悬停的onBrowserEvent函数.
代码应如何显示的快速模板:
import com.google.gwt.user.client.DOM;import com.google.gwt.user.client.Event;import com.google.gwt.user.client.ui.FlexTable;public class FlexTableWithHoverHandler extends FlexTable{ public FlexTableWithHoverHandler() { super(); sinkEvents(Event.ONMOUSEOVER); } @Override public void onBrowserEvent(Event event) { switch(DOM.eventGetType(event)) { case Event.ONMOUSEOVER: // Mouse over handling code here break; default: break; } }}
学习如何编写代码的最好方法是查看GWT源代码本身(搜索sinkEvent)并了解如何以GWT方式执行此操作.
. . .. ...