Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gwt 将SuggestBox作为可编辑单元格添加到CellTable_Gwt_Suggestbox - Fatal编程技术网

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选择时,它工作正常。但是当我通过单击鼠标进行选择时,它不会给出所选的值。它只给出我键入的值。