[英]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 :
ClickEvent
在consumedEvents
参数 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.