2012-11-23 39 views
1

我有一个网格从数据库中填充并工作正常。现在我想为这个网格添加一个mouseover事件并显示一个工具提示文本,该文本以突出显示的记录以多行方式显示所有列值。这里的业务案例是在网格中显示了不少列,用户希望在选择记录之前快速预览而不是水平滚动到最后。在这种情况下,挤压所有这些列以适应屏幕并不是一个干净的解决方案。Ext-GWT 3.0网格鼠标事件

我已经试过在网格和GridView的GXT 3.0 API中寻找所有可用的方法,但找不到任何内容以获取突出显示的记录。 MouseMove,MouseDown和MouseClick有一些事件,但MouseOver没有。

我试过各种论坛以及寻找解决方案,但似乎没有一个,所以认为它可能对其他人有用,如果我开始这个线程。

请注意,这个问题与Ext-JS无关。我使用的版本是Ext-GWT 3.0.1。

感谢

回答

1

你可以通过创建一个自定义单元格,并通过该给电网的具体ColumnConfig做到这一点。

使用自定义单元格,您可以访问所有需要的事件。 一旦你有权访问你需要的信息,以多种方式显示它。 GXT为此提供了很多解决方案。快速提示可能是这里的方法。

+0

乔纳森感谢您的答复。 – user1847252

+0

创建自定义单元格会给我什么在突出显示的单元格中可用,而不是记录。是否有可能获取记录对象本身,这将允许我检索记录中的所有列数据?如果是,那么我可以使用一个自定义单元格,例如ID列,然后从那里取出 – user1847252

+0

当然可以。当你创建你的单元类时,创建一个构造函数来接受你的视图(或者更具体地说是你的商店)。然后将此实例存储到私有最终变量中,然后您可以查询商店以获取与当前模型对应的记录。合理? – Jonathan

2

MouseMove是你想要的。只有当鼠标移动到小部件上时才会触发它。

或者,您可以通过使用下沉DOM事件到窗口小部件:

DOM.sinkEvents(widget.getElement(), Event.ONMOUSEOVER); 
在你的widget的 constructoronLoad方法

,然后覆盖widget的onBrowserEvent:

@Override 
public void onBrowserEvent(Event event){ 
final int eventType = DOM.eventGetType(event); 
    if(eventType == Event.ONMOUSEOVER) { 
     //DISPLAY THE INFO 
    } 
} 

这绝对比直接添加处理程序更难,但是可以自定义。你可以选择任一个。

顺便说一句,你可能想通过使用获得鼠标的位置:

mouseX = DOM.eventGetClientX(event); 
mouseY = DOM.eventGetClientY(event); 
+0

我有一个单独的网格类,它实现了IsWidget,并在重载的as​​Widget()实现中返回Grid。我能够在构造函数中添加sinkEvents,但无法覆盖onBrowserEvent。网格类只包含构造函数和aswidget方法。另一个问题是,即使我得到它覆盖,是否有API调用暴露,我可以用来获取网格中突出显示的记录,例如,getHighlightedItem或类似的东西 – user1847252

+0

@ user1847252所以你的意思是你没有网格类的基类?你应该......但即使你不这样做,你只需要实现'EventListener'接口。突出显示记录很容易设置'normal'和'hover' CSS,或者您可以添加'MouseOver'和'MouseOut'处理程序。不,它不会与其他行为/处理程序进行交易。 GWT /浏览器中的所有事件都会传播。 – texasbruce