我有一个带有EditTextCell的CellTable,EditButton在CellTable之外。在我单击EditButton之前,CellTable将是只读的,EditTextCell将允许我单击和编辑。有人知道怎么做这个吗?谢谢。
答案 0 :(得分:2)
我的自定义课程:
public class ButtonEnableEditTextCell extends EditTextCell {
private boolean click;
@Override
public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event,
ValueUpdater<String> valueUpdater) {
if (click) {
super.onBrowserEvent(context, parent, value, event, valueUpdater);
}
}
public void setClick(Boolean click) {
this.click = click;
}
}
使用表格查看:
CellTable<Employee> employeeTable;
@UiField
Button editButton;
ButtonEnableEditTextCell sequenceCell = new ButtonEnableEditTextCell();
@UiHandler("editButton")
public void editButtonClick(ClickEvent event) {
sequenceCell.setClick(true);
}
private void initTableColumns() {
Column<Employee, String> sequenceColumn = new Column<Employee, String>(sequenceCell) {
public String getValue(Employee employee) {
return employee.getSeqNumber().toString();
}
};
sequenceColumn.setFieldUpdater(new FieldUpdater<Employee, String>() {
public void update(int index, Employee employee, String value) {
employee.setSeqNumber(new Integer(value));
}
});
employeeTable.addColumn(sequenceColumn, "Sequence Number");
}
我可以使用此代码启用sequenceColumn。我想知道是否有更好的方法来做到这一点?
答案 1 :(得分:0)
你必须制作自己的手机。您可以扩展EditTextCell
并覆盖onBrowserEvent
功能。如果单击了您的按钮并启用了编辑,则请致电super.onBrowserEvent
。如果禁用编辑,则不执行任何操作或显示错误消息。
答案 2 :(得分:0)
我有类似的需要;除了希望能够在运行时根据行值更改每个单元格的可编辑性。我在EditTextCell上测试了覆盖渲染,isEditing,resetFocus和编辑的各种组合(我没有尝试onBrowserEvent解决方案)。
当我只覆盖渲染时(如果不可编辑则显示HTML值);我在重置焦点时遇到错误(discussed here)。即使我重写了resetFocus,这仍然继续。当我只覆盖isEditing时,单击时单元格将闪烁编辑,然后闪回。完美的工作是覆盖编辑。我基于为Column.getValue传入的值添加了一个标签,你可以触发你喜欢的(即根据你的编辑模式进行一些设置),但是对一个单元的禁用结果就像这样简单:
private static class LockableEditTextCell extends EditTextCell {
@Override
protected void edit(Context context, Element parent, java.lang.String value) {
if (!value.startsWith(LOCKED_CELL_VALUE)) {
super.edit(context, parent, value);
}
}
}
更新:这有一个错误,如果你点击一个可编辑的单元格;然后锁定牢房;它会让你编辑。您还必须覆盖onBrowserEvent:
@Override
public void onBrowserEvent(Context context, Element parent, String value,
NativeEvent event, ValueUpdater<String> valueUpdater) {
if (!value.startsWith(IncentivesColumnConfigurator.LOCKED_CELL_VALUE)) {
super.onBrowserEvent(context, parent, value, event, valueUpdater);
}
}