将SuggestBox添加到CellTable作为可编辑单元格

时间:2011-10-01 08:04:43

标签: gwt suggestbox

SuggestBoxCellTable有什么办法吗?也许还有另一种解决方案SuggestBox

我需要一个带有建议功能的可编辑单元格吗?

我正在使用GWT 2.4。

4 个答案:

答案 0 :(得分:2)

我认为你不能直接添加它。尝试使用ClickableTextCell作为该列的单元格。然后编写ValueUpdater(在单击单元格时将调用它)以打开DialogBox。将您的SuggestBox和其他小部件(OK按钮,取消按钮等)放在DialogBox中。使用单元格的当前内容初始化SelectionBox。 DialogBox可能是一个DialogBox子类,其中包含额外的状态数据,您使用该CellTable行的对象以及该列的字段进行初始化,以便OK操作知道要使用SuggestBox的新内容更新哪个对象的字段。基本上它是一个弹出编辑器。不太理想,因为用户希望编辑器嵌入在CellTable中,但只有少数单元格编辑器可用(EditTextCell,DatePickerCell,SelectionCell和CheckboxCell,也许是文本编辑的另一种变体),但我使用了这种技术,实际上,这不是太糟糕。

答案 1 :(得分:1)

我最终使用的是FlexTable而不是CellTable。使用FlexTable,您可以将任何窗口小部件放在表格单元格中。

答案 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);
    }

到目前为止一切顺利。