簡體   English   中英

我們可以動態更改GWT Bootstrap 3 ButtonCell圖標嗎?

[英]Can we change GWT Bootstrap 3 ButtonCell Icon Dynamically?

我有一個GWT引導程序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。 有可能實現嗎? 並且可以創建擴展GWT IconType枚舉的自定義IconType嗎? 我想放一個動畫圖標(如加載圖標 )。

好吧,您不能連續更改按鈕的圖標,尤其是當您使用已指定的圖標創建整列時。 但是您可以連續redraw() ,這可能是實現您想要的方式。

我使用AbstractCell渲染按鈕和onBrowserEvent

  • 首先創建一個AbstractCell與ClickEventconsumedEvents參數
  • 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類,但這應該作為另一個問題來提出,以獲得精確的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM