当我想编辑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");
你必须面对这个问题吗?有没有明确的解决方案?
由于
答案 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是否已在单元格上设置,而不是在行上。 它可能会解决您的问题。