SuggestBox
有什么办法CellTable
吗?也许还有另一种解决方案SuggestBox
?
我需要获得具有建议功能的可编辑单元格吗?
我正在使用 GWT 2.4。
SuggestBox
有什么办法CellTable
吗?也许还有另一种解决方案SuggestBox
?
我需要获得具有建议功能的可编辑单元格吗?
我正在使用 GWT 2.4。
我不认为你可以直接添加它。尝试使用 ClickableTextCell 作为该列的单元格。然后编写您的 ValueUpdater(单击单元格时将调用)以打开一个对话框。将您的 SuggestBox 和其他小部件(确定按钮、取消按钮等)放在该对话框中。使用单元格的当前内容初始化 SelectionBox。DialogBox 可能是一个 DialogBox 子类,其中包含您使用该 CellTable 行的对象以及该列的字段初始化的额外状态数据,以便 OK 操作知道要使用 SuggestBox 的新内容更新哪个对象上的哪个字段. 本质上它是一个弹出式编辑器。不理想,因为用户希望编辑器嵌入到 CellTable 中,但只有少数可用的单元格编辑器(EditTextCell、DatePickerCell、
我也需要这个并找到了一个解决方案(正在测试中,但只要它正在工作):
我将 TextInputCell 中的代码复制到了一个新的类 SuggestBoxTextInputCell
public class SuggestBoxTextInputCell extends AbstractInputCell<String, SuggestBoxTextInputCell.ViewData> {
MySuggestBox suggestBox;
并在 onBrowserEvent 方法中添加了一些行:
// Ignore events that don't target the input.
InputElement input = getInputElement(parent);
String eventType = event.getType();
if (BrowserEvents.FOCUS.equals(eventType)) {
TextBox textBox = new MyTextBox(input);
suggestBox = new MySuggestBox(getSuggestOracle(), textBox);
suggestBox.onAttach();
}
Element target = event.getEventTarget().cast();
MySuggestBox 和 MyTextbox 类的存在只是为了公开所需的构造函数和方法:
private class MyTextBox extends TextBox {
public MyTextBox(Element element) {
super(element);
}
}
private class MySuggestBox extends SuggestBox {
public MySuggestBox(SuggestOracle suggestOracle, TextBox textBox) {
super(suggestOracle, textBox);
}
@Override
public void onAttach() {
super.onAttach();
}
}
getSuggestOracle() 仅提供所需的 SuggestOracle。希望有人可以使用此解决方案。
我需要这个作为解决方案,所以我使用了 Ande Hofer 提供的解决方案。
Ankit Singla 遇到了完全相同的问题,当我按“Enter”键而不是“鼠标单击”时,建议框工作正常。
我继续并将其添加到解决方案中。
if (BrowserEvents.FOCUS.equals(eventType)) {
...
...
suggestbox.addSelectionHandler(new SelectionHandler<Suggestion>() {
@Override
public void onSelection(SelectionEvent<Suggestion> event) {
Suggestion selectedSuggestion = event.getSelectedItem();
String selectedValue = selectedSuggestion.getReplacementString();
onSuggestSelected(input, selectedValue, valueUpdater);
}
});
suggestbox.onAttach();
}
和一个私人功能
private void onSuggestSelected(Element input, String value,
ValueUpdater<String> valueUpdater) {
input.blur();
suggestbox.onDetach();
if (suggestbox.getSuggestionDisplay().isSuggestionListShowing()) {
((DefaultSuggestionDisplay) suggestbox.getSuggestionDisplay()).hideSuggestions();
}
valueUpdater.update(value);
}
到现在为止还挺好。