TextInputCell:我必须单击两次才能编辑单元格

时间:2012-10-01 09:20:58

标签: gwt gwt-celltable

当我想编辑textinputcell时,我通常需要两次点击:第一次点击会将焦点放在单元格上,然后是输入。

我有一个20列的celltable,所有textinputcell - excel风格。而这个问题使它完全无法使用。

以下是代码示例:

FieldUpdater<MyBean, String> fieldUpdater = new FieldUpdater<MyBean, String>() {
  @Override
  public void update(int index, MyBean object, String value) {
    object.setValue(value);
  }
};

Column<MyBean, String> column = new Column<MyBean, String>(new TextInputCell()) {
  @Override
  public String getValue(MyBean object) {
    return objet.getValue();
  }
};

column.setFieldUpdater(fieldUpdater);
table.addColumn(column, "Col");

你必须面对这个问题吗?有没有明确的解决方案?

由于

3 个答案:

答案 0 :(得分:2)

KeyboardSelectionPolicy的{​​{1}}设置为CellTable(即DISABLED)。

适用于Firefox / Chrome上的GWT 2.5。

请参阅https://code.google.com/p/google-web-toolkit/issues/detail?id=7706其他详细信息。

答案 1 :(得分:-1)

好吧,这就是我所做的:我注意到EditTextCell不需要两次点击来改变焦点

所以我复制了这个类(一切都是私有的:/),我在方法渲染中做了以下更改:

之前:

if (viewData != null) {
  String text = viewData.getText();
  if (viewData.isEditing()) {
    /*
     * Do not use the renderer in edit mode because the value of a text
     * input element is always treated as text. SafeHtml isn't valid in the
     * context of the value attribute.
     */
    sb.append(template.input(text));
  } else {
    // The user pressed enter, but view data still exists.
    sb.append(renderer.render(text));
  }
} else if (value != null) {
  sb.append(renderer.render(value));
}

之后:

    if (viewData != null) {
        String text = viewData.getText();
        sb.append(template.input(text));
    }
    else if (value != null) {
        sb.append(template.input(value));
    }

我只使用模板,而不是渲染器

奖金: 由于您使用自己的单元格副本,因此可以编辑模板。我添加了一个宽度(构造函数arg):

interface Template extends SafeHtmlTemplates {
    @Template("<input type=\"text\" value=\"{0}\" style=\"width:{1}px\" tabindex=\"-1\"></input>")
    SafeHtml input(String value, String width);
}

我将这样的模板称为:sb.append(template.input(text, width));

希望有所帮助:)

答案 2 :(得分:-1)

检查网格的selectionModel是否已在单元格上设置,而不是在行上。 它可能会解决您的问题。