GWT中的事件处理

GWT中的事件处理,gwt,uibinder,Gwt,Uibinder,我想这样做: 我想要一个单元格表,其中每个单元格都是我编写的类。我需要为单元格表添加一个单击事件。那么,我如何才能知道单击了哪个单元格。由于Cell是我定义的一个类,因此基于单击的Cell,我需要执行一些操作。我是否可以以某种方式获取单击的单元格的对象详细信息。例如 我需要一个类似于单元格表的excel表,excel表中的每个单元格都是我定义的类,比如该类包含如下值: CellClass{ boolean isempty; string name; int id; } 现在,如果我在ex

我想这样做: 我想要一个单元格表,其中每个单元格都是我编写的类。我需要为单元格表添加一个单击事件。那么,我如何才能知道单击了哪个单元格。由于Cell是我定义的一个类,因此基于单击的Cell,我需要执行一些操作。我是否可以以某种方式获取单击的单元格的对象详细信息。例如

我需要一个类似于单元格表的excel表,excel表中的每个单元格都是我定义的类,比如该类包含如下值:

CellClass{
 boolean isempty;
 string name;
 int id;
}

现在,如果我在excel工作表中单击,如何获取单击的单元格,以便告诉用户单元格的名称以及它是否为空。

使用ClickableTextCell创建可单击单元格。请参阅以下代码详细信息:

nameCell = new ClickableTextCell() {
            @Override
            public void render(com.google.gwt.cell.client.Cell.Context context,
                    String data, SafeHtmlBuilder sb) {
                super.render(context, "", sb);

                    sb.appendHtmlConstant("<input type=text value='"+data+"' />);

        };

        nameColumn = new Column<Document, String>(nameCell) {

            @Override
            public String getValue(Document object) {
                //code
            }
        };
nameCell=新建ClickableTextCell(){
@凌驾
public void render(com.google.gwt.cell.client.cell.Context),
字符串数据,安全HTMLBuilder sb){
超级渲染(上下文“,”sb);
某人附加物(“);
};
nameColumn=新列(nameCell){
@凌驾
公共字符串getValue(文档对象){
//代码
}
};

请注意,每列只有一个单元格实例,并非每个值都由一个单元格实例表示。上面描述的结构将是您在CellTable.setRowData中设置的数据结构

单元格必须通过中的超级构造函数或中定义的
getConsumedEvents
方法声明它感兴趣的事件。在本例中,是“单击”事件

然后,您可以在自定义单元格中实现
onBrowserEvent
方法,并对单击作出反应。将向此方法传递一个上下文,指示事件引用的行和列(请参阅)以及与单击关联的键和值

在您的情况下,自定义单元格将如下所示:

public class MyCell extends AbstractCell<String> {
    public MyCell() {
        super("click");
    }

    @Override
    public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) {
        // Handle the click event.
        if ("click".equals(event.getType())) {
            // Ignore clicks that occur outside of the outermost element.
            EventTarget eventTarget = event.getEventTarget();
            if (parent.getFirstChildElement().isOrHasChild(Element.as(eventTarget))) {
                doAction(value, valueUpdater);
            }
        }
    }
}
公共类MyCell扩展了AbstractCell{
公共迈塞尔(){
超级(“点击”);
}
@凌驾
public void onBrowserEvent(上下文上下文、元素父级、字符串值、NativeEvent事件、ValueUpdater ValueUpdater){
//处理单击事件。
如果(“单击“.equals(event.getType())){
//忽略在最外层元素之外发生的单击。
EventTarget EventTarget=event.getEventTarget();
if(parent.getFirstChildElement().isOrHasChild(Element.as(eventTarget))){
doAction(值、值更新程序);
}
}
}
}
您还可以在级别上拦截事件

您可以在中找到更多信息