2012-06-26 105 views
0

我想要做这样的事情: 我想要一个单元格表,其中每个单元格都是我写的类。我需要为单元格表添加一个单击事件。那么如何获得点击哪个单元格?由于Cell是我定义的一个类,基于点击的单元格,我需要执行一些操作。我可以以某种方式获取被点击的单元格的对象细节。对于如GWT中的事件处理

我需要一个Excel表,这就好比细胞的表,在Excel工作表中每个单元格是我定义的类,说类持有类似的价值观:

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

,如果我现在点击Excel表格,我怎样才能得到哪个单元被点击,这样我就可以告诉用户单元的名称以及它是否为空。

回答

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

注意,只有一个用于每列的单元格的实例,而不是每一个值由小区实例表示。上面描述的结构将是您在CellTable.setRowData中设置的数据的结构。

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

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

在你的情况下,自定义单元格会是这个样子:

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

您还可以在Column水平截获该事件。

你可以在Dev Guide

中找到更多的信息