gpt4 book ai didi

java - 我们可以动态更改 GWT Bootstrap 3 ButtonCell 图标吗?

转载 作者:太空宇宙 更新时间:2023-11-04 08:30:10 25 4
gpt4 key购买 nike

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

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吗? ?我想放一个动画图标(比如 loading icon )。

最佳答案

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

我使用 AbstractCell呈现一个按钮和onBrowserEvent :

  • 首先在 consumedEvents 参数中使用 ClickEvent 创建一个 AbstractCell
  • render() 方法中根据clicked 状态渲染一个按钮
  • onBrowserEvent() 方法中更改clicked 状态并重新呈现该行

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

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

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 中扩展枚举。例如,请参阅此问题:Can enums be subclassed to add new elements? .

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

关于java - 我们可以动态更改 GWT Bootstrap 3 ButtonCell 图标吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44850832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com