0

我有一个 GWT bootstrap 3 按钮作为使用 IconType 和 ButtonType 创建的ButtonCell :

public abstract class ButtonColumn<T> extends Column<T, String> {
    public ButtonColumn(IconType iconType, ButtonType buttonType) {
        this(new ButtonCell(buttonType, iconType));
    }
}

所以当我创建按钮时,我会

new ButtonColumn<Object>(IconType.PLAY, ButtonType.SUCCESS) {
  @Override
  public void onClick(Object obj) {
    doStuff(obj);
  }
};

我想更改我的按钮 IconType onClick。有可能实现吗?我可以创建一个自定义 IconType 扩展 GWT IconType Enum吗?我想放一个动画图标(如加载图标)。

4

1 回答 1

1

好吧,您不能连续更改按钮的图标,尤其是当您使用已经指定的图标创建整个列时。但是你可以redraw()连续,这可能是实现你想要的一种方式。

我使用AbstractCell呈现按钮和onBrowserEvent

  • ClickEvent首先使用inconsumedEvents参数创建一个 AbstractCell
  • render()方法中根据点击状态渲染一个按钮
  • onBrowserEvent()方法中更改单击状态并重新渲染该行

单击状态最好保留在表的基础数据类型中,以便对每一行都可用。

这是一个完整的工作示例代码:

final CellTable<TableType> table = new CellTable<TableType>();

AbstractCell<TableType> buttonCell = new AbstractCell<ButtonCellTest.TableType>(ClickEvent.getType().getName()) {
    @Override
    public void render(Context context, TableType value, SafeHtmlBuilder sb) {
        Button button = new Button();
        button.setType(ButtonType.SUCCESS);
        button.setSize(ButtonSize.SMALL);
        button.add(new Icon(value.isClicked() ? IconType.CHECK : IconType.TIMES));
        sb.append(SafeHtmlUtils.fromTrustedString(button.toString()));
    }

    @Override
    public void onBrowserEvent(Context context, Element parent, TableType value, NativeEvent event, ValueUpdater<TableType> valueUpdater) {
        value.setClicked(!value.isClicked());
        // ... do stuff...
        table.redrawRow(context.getIndex());
    }
};
table.addColumn(new Column<TableType, TableType>(buttonCell) {
    @Override
    public TableType getValue(TableType object) {
        return object;
    }
});

ArrayList<TableType> rowData = new ArrayList<TableType>();
rowData.add(new TableType("row 1"));
rowData.add(new TableType("row 2"));
...
table.setRowData(rowData);

示例表的数据类型保持点击状态:

public class TableType {
    String text;
    boolean clicked = false;

    public TableType(String text) {
        this.text = text;
    }

    public String getText() {
        return text;
    }

    public boolean isClicked() {
        return clicked;
    }

    public void setClicked(boolean clicked) {
        this.clicked = clicked;
    }
}

至于扩展IconType枚举 - 不,您不能在 Java 中扩展枚举。例如看这个问题:可以将枚举子类化以添加新元素吗?.

您可以尝试添加自己的CSS课程,但这应该作为另一个问题提出以获得准确的答案。

于 2017-06-30T22:01:28.353 回答