4

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

我需要获得具有建议功能的可编辑单元格吗?

我正在使用 GWT 2.4。

4

4 回答 4

2

我不认为你可以直接添加它。尝试使用 ClickableTextCell 作为该列的单元格。然后编写您的 ValueUpdater(单击单元格时将调用)以打开一个对话框。将您的 SuggestBox 和其他小部件(确定按钮、取消按钮等)放在该对话框中。使用单元格的当前内容初始化 SelectionBox。DialogBox 可能是一个 DialogBox 子类,其中包含您使用该 CellTable 行的对象以及该列的字段初始化的额外状态数据,以便 OK 操作知道要使用 SuggestBox 的新内容更新哪个对象上的哪个字段. 本质上它是一个弹出式编辑器。不理想,因为用户希望编辑器嵌入到 CellTable 中,但只有少数可用的单元格编辑器(EditTextCell、DatePickerCell、

于 2011-10-01T18:11:34.917 回答
1

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

于 2011-11-03T09:52:21.637 回答
1

我也需要这个并找到了一个解决方案(正在测试中,但只要它正在工作):

我将 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。希望有人可以使用此解决方案。

于 2012-12-13T19:24:54.347 回答
0

我需要这个作为解决方案,所以我使用了 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);
    }

到现在为止还挺好。

于 2017-09-14T02:41:43.930 回答