当用户将鼠标悬停在GWT CellTable中的列标题上时,是否有任何方法触发方法?
好的,我有一个CellTable当用户将鼠标悬停在GWT CellTable中的列标题上时,是否有任何方法触发方法?,gwt,Gwt,好的,我有一个CellTableCellTable=newcelltable() &nameColumnIndexedColumn nameColumn=新的IndexedColumn(0) 然后table.addColumn(nameColumn,“Name”) 我希望当用户mouseOvername列的标题时,它将触发methodX table.addCellPreviewHandler仅适用于表中的单元格,不适用于列的标题或标题 table.addCellPreviewHandler(ne
CellTable=newcelltable()代码>
&nameColumnIndexedColumn nameColumn=新的IndexedColumn(0)
然后table.addColumn(nameColumn,“Name”)代码>
我希望当用户mouseOver
name列的标题
时,它将触发methodX
table.addCellPreviewHandler
仅适用于表中的单元格,不适用于列的标题或标题
table.addCellPreviewHandler(new Handler<List<String>>(){
@Override
public void onCellPreview(
CellPreviewEvent<List<String>> event) {
if ("mouseover".equals(event.getNativeEvent().getType())) {
int col=event.getColumn();
int row=event.getIndex();
//call sthing here
}
});
但是Gwt似乎没有识别出“mouseover”.equals(event.getType())
我们所有人有时都会遇到“小部件”和事件的问题,所以不要担心
问题是ClickableTextCell只有“click
”和“keydown
”的沉没事件,因此它不再侦听
通常在小部件中,您可以使用方法sinkEvents
指定更多事件,但在这种情况下,该方法不存在
依我看来,最简单的解决办法是创建自己的“ClickableTextCell
”。我已经做到了,工作起来很有魅力:
import static com.google.gwt.dom.client.BrowserEvents.CLICK;
import static com.google.gwt.dom.client.BrowserEvents.KEYDOWN;
import static com.google.gwt.dom.client.BrowserEvents.MOUSEOUT;
import static com.google.gwt.dom.client.BrowserEvents.MOUSEOVER;
import com.google.gwt.cell.client.AbstractSafeHtmlCell;
import com.google.gwt.cell.client.Cell.Context;
import com.google.gwt.cell.client.ValueUpdater;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.text.shared.SafeHtmlRenderer;
import com.google.gwt.text.shared.SimpleSafeHtmlRenderer;
public abstract class MyClickableTextCell extends AbstractSafeHtmlCell<String> {
/**
* Construct a new ClickableTextCell that will use a
* {@link SimpleSafeHtmlRenderer}.
*/
public MyClickableTextCell() {
this(SimpleSafeHtmlRenderer.getInstance());
}
/**
* Construct a new ClickableTextCell that will use a given
* {@link SafeHtmlRenderer}.
*
* @param renderer a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
*/
public MyClickableTextCell(SafeHtmlRenderer<String> renderer) {
super(renderer, CLICK, KEYDOWN, MOUSEOVER, MOUSEOUT);
}
@Override
public void onBrowserEvent(Context context, Element parent, String value,
NativeEvent event, ValueUpdater<String> valueUpdater) {
super.onBrowserEvent(context, parent, value, event, valueUpdater);
if (CLICK.equals(event.getType())) {
onEnterKeyDown(context, parent, value, event, valueUpdater);
}
if (CLICK.equals(event.getType())) {
onEnterKeyDown(context, parent, value, event, valueUpdater);
}
if (MOUSEOVER.equals(event.getType())) {
onMouseOver(context, parent, value, event, valueUpdater);
}
if (MOUSEOUT.equals(event.getType())) {
onMouseOut(context, parent, value, event, valueUpdater);
}
}
public abstract void onMouseOver(com.google.gwt.cell.client.Cell.Context context, Element parent,
String value, NativeEvent event, ValueUpdater<String> valueUpdater);
public abstract void onMouseOut(com.google.gwt.cell.client.Cell.Context context, Element parent,
String value, NativeEvent event, ValueUpdater<String> valueUpdater);
@Override
protected void onEnterKeyDown(Context context, Element parent, String value,
NativeEvent event, ValueUpdater<String> valueUpdater) {
if (valueUpdater != null) {
valueUpdater.update(value);
}
}
@Override
protected void render(Context context, SafeHtml value, SafeHtmlBuilder sb) {
if (value != null) {
sb.append(value);
}
}
}
import static com.google.gwt.dom.client.BrowserEvents.CLICK;
导入静态com.google.gwt.dom.client.BrowserEvents.KEYDOWN;
导入静态com.google.gwt.dom.client.BrowserEvents.MOUSEOUT;
导入静态com.google.gwt.dom.client.BrowserEvents.MOUSEOVER;
导入com.google.gwt.cell.client.AbstractSafetHtmlCell;
导入com.google.gwt.cell.client.cell.Context;
导入com.google.gwt.cell.client.ValueUpdater;
导入com.google.gwt.dom.client.Element;
导入com.google.gwt.dom.client.NativeEvent;
导入com.google.gwt.safehtml.shared.safehtml;
导入com.google.gwt.safehtml.shared.SafeHtmlBuilder;
导入com.google.gwt.text.shared.SafeHtmlRenderer;
导入com.google.gwt.text.shared.SimpleSafeHtmlRenderer;
公共抽象类MyClickableTextCell扩展了AbstractSafeThlCell{
/**
*构造一个新的ClickableTextCell,它将使用
*{@link SimpleSafeHtmlRenderer}。
*/
公共MyClickableTextCell(){
这是(SimpleSafeHtmlRenderer.getInstance());
}
/**
*构造一个新的ClickableTextCell,它将使用给定的
*{@link SafeHtmlRenderer}。
*
*@param呈现程序{@link SafeHtmlRenderer SafeHtmlRenderer}实例
*/
公共MyClickableTextCell(安全HtmlRenderer渲染器){
超级(渲染器、单击、向下键、鼠标悬停、鼠标悬停);
}
@凌驾
public void onBrowserEvent(上下文上下文、元素父级、字符串值、,
NativeEvent事件,ValueUpdater(ValueUpdater){
onBrowserEvent(上下文、父级、值、事件、值更新程序);
if(单击.equals(event.getType())){
onEnterKeyDown(上下文、父级、值、事件、值更新程序);
}
if(单击.equals(event.getType())){
onEnterKeyDown(上下文、父级、值、事件、值更新程序);
}
if(MOUSEOVER.equals(event.getType())){
onMouseOver(上下文、父级、值、事件、值更新程序);
}
if(MOUSEOUT.equals(event.getType())){
onMouseOut(上下文、父级、值、事件、值更新程序);
}
}
mouseover上的公共抽象void(com.google.gwt.cell.client.cell.Context上下文,元素父元素,
字符串值、NativeEvent事件、ValueUpdater ValueUpdater);
公共抽象void onMouseOut(com.google.gwt.cell.client.cell.Context上下文,元素父元素,
字符串值、NativeEvent事件、ValueUpdater ValueUpdater);
@凌驾
受保护的void onEnterKeyDown(上下文上下文、元素父元素、字符串值、,
NativeEvent事件,ValueUpdater(ValueUpdater){
if(valueUpdater!=null){
valueUpdater.update(值);
}
}
@凌驾
受保护的void呈现(上下文上下文、安全HTML值、安全HTMLBuilder sb){
if(值!=null){
附加(价值);
}
}
}
如您所见,创建对象时需要填充两个抽象方法。这些方法是在启动onMouseOver和onMouseOut时使用的
因此,基本上,当您创建标题名称ColumnHeader
时,您应该执行以下操作:
MyClickableTextCell cl = new MyClickableTextCell() {
@Override
public void onMouseOver(Context context, Element parent, String value, NativeEvent event,
ValueUpdater<String> valueUpdater) {
GQuery.console.log("onMouseOver");
}
@Override
public void onMouseOut(Context context, Element parent, String value, NativeEvent event,
ValueUpdater<String> valueUpdater) {
GQuery.console.log("onMouseOut");
}
};
//Specify the MyClickableTextCell to you Column's Header
Header<String> nameColumnHeader = new Header<String>(cl){
....
}
.... //Add the Column with the Header to the CellTable as normal.
MyClickableTextCell cl=新建MyClickableTextCell(){
@凌驾
mouseover上的公共void(上下文上下文、元素父元素、字符串值、NativeEvent事件、,
ValueUpdater(ValueUpdater){
GQuery.console.log(“onMouseOver”);
}
@凌驾
public void onMouseOut(上下文上下文、元素父元素、字符串值、NativeEvent事件、,
ValueUpdater(ValueUpdater){
GQuery.console.log(“onMouseOut”);
}
};
//为列标题指定MyClickableTextCell
标题名称ColumnHeader=新标题(cl){
....
}
.... //将标题为的列按常规添加到CellTable。
快乐编码 thax你,我来测试你的解决方案你试过了吗?我很好奇它是否奏效,或者你是否找到了另一个解决办法。谢谢
MyClickableTextCell cl = new MyClickableTextCell() {
@Override
public void onMouseOver(Context context, Element parent, String value, NativeEvent event,
ValueUpdater<String> valueUpdater) {
GQuery.console.log("onMouseOver");
}
@Override
public void onMouseOut(Context context, Element parent, String value, NativeEvent event,
ValueUpdater<String> valueUpdater) {
GQuery.console.log("onMouseOut");
}
};
//Specify the MyClickableTextCell to you Column's Header
Header<String> nameColumnHeader = new Header<String>(cl){
....
}
.... //Add the Column with the Header to the CellTable as normal.