Gwt 将SuggestBox作为可编辑单元格添加到CellTable
有没有办法将Gwt 将SuggestBox作为可编辑单元格添加到CellTable,gwt,suggestbox,Gwt,Suggestbox,有没有办法将SuggestBox转换成CellTable?也许还有另一个解决方案SuggestBox 我需要一个带有建议功能的可编辑单元格 我正在使用GWT2.4。我认为您不能直接将其添加到中。尝试使用ClickableTextCell作为该列的单元格。然后编写ValueUpdater(单击单元格时将调用该程序)以打开对话框。将SuggestBox和其他小部件(OK按钮、Cancel按钮等)放入该对话框中。使用单元格的当前内容初始化SelectionBox。DialogBox很可能是一个Dial
SuggestBox
转换成CellTable
?也许还有另一个解决方案SuggestBox
我需要一个带有建议功能的可编辑单元格
我正在使用GWT2.4。我认为您不能直接将其添加到中。尝试使用ClickableTextCell作为该列的单元格。然后编写ValueUpdater(单击单元格时将调用该程序)以打开对话框。将SuggestBox和其他小部件(OK按钮、Cancel按钮等)放入该对话框中。使用单元格的当前内容初始化SelectionBox。DialogBox很可能是一个DialogBox子类,其中包含使用该CellTable行的对象以及该列的字段初始化的额外状态数据,以便OK操作知道使用SuggestBox的新内容更新哪个对象上的哪个字段。本质上它是一个弹出式编辑器。这并不理想,因为用户希望编辑器嵌入到CellTable中,但只有少数几个可用的单元格编辑器(EditTextCell、DatePickerCell、SelectionCell和CheckboxCell,可能还有另一种文本编辑变体),但我使用了这种技术,而且实际上,还不算太糟。我最终使用了而不是
CellTable
。您可以将任何小部件放入表格单元格中。我也需要它,并找到了一个解决方案(正在测试中,但只要它能工作):
我将代码从TextInputCell复制到一个新类SuggestBoxTextInputCell中
公共类SuggestBoxTextInputCell扩展了AbstractInputCell{
MySuggestBox suggestBox;
并向onBrowserEvent方法添加了一些行:
//忽略不以输入为目标的事件。
InputElement输入=getInputElement(父级);
字符串eventType=event.getType();
if(BrowserEvents.FOCUS.equals(eventType)){
TextBox TextBox=新的MyTextBox(输入);
suggestBox=新建MySuggestBox(getSuggestOracle(),textBox);
suggestBox.onAttach();
}
元素目标=event.getEventTarget().cast();
MySuggestBox和MyTextbox类的存在只是为了公开所需的构造函数和方法:
getSuggestOracle()只提供所需的SuggestOracle。希望有人能使用此解决方案。我需要将此作为解决方案,因此我使用Ande Hofer提供的解决方案
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();
}
Ankit Singla遇到了完全相同的问题,当我按下“回车”键时,suggestbox工作正常,但不是通过“鼠标点击”来实现的
我进一步将其添加到解决方案中
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();
}
if(BrowserEvents.FOCUS.equals(eventType)){
...
...
suggestbox.addSelectionHandler(新的SelectionHandler(){
@凌驾
选举时公共无效(SelectionEvent事件){
Suggestion selectedSuggestion=event.getSelectedItem();
String selectedValue=selectedSuggestion.getReplacementString();
onSuggestSelected(输入、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);
}
private void onSuggestSelected(元素输入、字符串值、,
ValueUpdater(ValueUpdater){
input.blur();
suggestbox.onDetach();
如果(suggestbox.getSuggestionDisplay().isSuggestionListShowing()){
((DefaultSuggestionDisplay)SuggestionBox.getSuggestionDisplay()).HidesSuggestions();
}
valueUpdater.update(值);
}
到目前为止还不错。当我通过enter选择时,它工作正常。但是当我通过单击鼠标进行选择时,它不会给出所选的值。它只给出我键入的值。