0

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

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

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

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

4

2 回答 2

0

使用 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
            }
        };
于 2012-06-26T13:26:14.303 回答
0

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

Cell 必须通过AbstractCell中的超级构造函数或CellgetConsumedEvents中定义的方法来声明它感兴趣的事件。在你的情况下,“点击”事件。

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

在您的情况下,自定义 Cell 看起来像这样:

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);
            }
        }
    }
}

您还可以在级别拦截事件。

您可以在开发指南中找到更多信息

于 2012-06-26T13:27:43.570 回答