0

我的任务是创建一个带有控件以添加新行的表。这个典型的控件应该由相应的一组 TextEdits 和一个“添加新行”按钮组成。

我使用细胞表。

我可以单独创建这个“添加小部件”,只需在某个面板中组合按钮和必要的字段,但我想尝试将它绑定到表格。我想使用 CellTable 来制作它。为此,我尝试利用 CellTable 的标题。我创建了一个 Header 并添加了一个 EditCellText 和 ButtonCell。我有两个问题:

  • 该按钮未显示。而是显示 getValue() 方法返回的值。
  • 我不知道如何处理单击该按钮。

[1] 最后,第一个问题是:如何将按钮添加到 CellTable 的表头中,如何处理对该按钮的点击?该按钮应该看起来像一个按钮,而不仅仅是一些点击区域。

[2] 可能还有另一种方法可以完成我的任务。是否可以创建不同行包含不同按钮的 CellTable?即第一行持有按钮“添加”,所有其他行持有按钮“删除”。GWT 能做到这一点吗?

[3] 还有一个问题。目前,我使用 Java 代码描述了 CellTable 的结构。即,我在创建父小部件时手动创建和添加列和标题对象。是否可以用 XML 表示我的 CellTable 的结构,即使用一些 mySpecialCellTable.ui.xml 文件?

4

2 回答 2

6
public static class BtnHeader extends Header<String>{

    public BtnHeader(ButtonCell cell) {
        super(cell);

    }
     @Override
       public void onBrowserEvent(Context context, Element elem, NativeEvent nativeEvent)
       {
          int eventType = Event.as(nativeEvent).getTypeInt();
          if (eventType == Event.ONCLICK)
          {
             nativeEvent.preventDefault();
            updateHeader();
          }
       }
    @Override
    public String getValue() {
        return "Click!";
    }
    protected void updateHeader() {
        // TODO to redefine in a defiant class

    }

 }

在你的代码中

BtnHeader header = new BtnHeader(new ButtonCell()){
                @Override
                protected   void updateHeader(){
                    // Actions when clicking button
                }

cTable.addColumn(column, header);
于 2012-11-15T09:45:33.483 回答
1

要在表格中显示按钮,您可以使用 ButtonCell:

Column<MyObject, String> delete = new Column<MyObject, String>(new ButtonCell()) {

            @Override
            public String getValue(final MyObjectobject object) {
                return "delete";
            }
        };

        delete.setFieldUpdater(new FieldUpdater<MyObject, String>() {

            @Override
            public void update(final int index, final MyObjectobject object, final String value) {

                myActivity.delete(object); // to whatever should happen if button is clicked
            }
        });

这也应该回答第二个问题。据我所知,您必须在 java 类中添加列。在您的 uibinder 文件中,您只能将单元格表作为一个整体添加。

<p1:CellTable ui:field="table"></p1:CellTable>

希望这可以帮助。

于 2012-06-20T06:01:48.803 回答