SuggestBox
到CellTable
有什么办法吗?也许还有另一种解决方案SuggestBox
?
我需要一个带有建议功能的可编辑单元格吗?
我正在使用GWT 2.4。
答案 0 :(得分:2)
我认为你不能直接添加它。尝试使用ClickableTextCell作为该列的单元格。然后编写ValueUpdater(在单击单元格时将调用它)以打开DialogBox。将您的SuggestBox和其他小部件(OK按钮,取消按钮等)放在DialogBox中。使用单元格的当前内容初始化SelectionBox。 DialogBox可能是一个DialogBox子类,其中包含额外的状态数据,您使用该CellTable行的对象以及该列的字段进行初始化,以便OK操作知道要使用SuggestBox的新内容更新哪个对象的字段。基本上它是一个弹出编辑器。不太理想,因为用户希望编辑器嵌入在CellTable中,但只有少数单元格编辑器可用(EditTextCell,DatePickerCell,SelectionCell和CheckboxCell,也许是文本编辑的另一种变体),但我使用了这种技术,实际上,这不是太糟糕。
答案 1 :(得分:1)
答案 2 :(得分:1)
我也需要这个,并找到了一个解决方案(正在测试中,但解决它的问题):
我将CodeInputCell中的代码复制到一个新的类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。希望有人可以使用这个解决方案。
答案 3 :(得分:0)
我需要这个解决方案,所以我可以使用Ande Hofer提供的解决方案。
Ankit Singla遇到了完全相同的问题,当我按下&#34; Enter&#34;时,建议箱工作正常。键,但不是来自&#34;鼠标点击&#34;。
我继续进一步将其添加到解决方案中。
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);
}
到目前为止一切顺利。