如何禁用EditTextCell并使用GWT中的EditButton单击启用它?

时间:2011-03-02 17:38:56

标签: gwt

我有一个带有EditTextCell的CellTable,EditButton在CellTable之外。在我单击EditButton之前,CellTable将是只读的,EditTextCell将允许我单击和编辑。有人知道怎么做这个吗?谢谢。

3 个答案:

答案 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);
  }
}