GWT如何设置SuggestBox的位置?

3
我正在使用 GWT 中的 SuggestBox 来创建一个带有漂亮建议列表的文本框,就像这样:
public void onModuleLoad() {
    MultiWordSuggestOracle oracle = new MultiWordSuggestOracle();  
    oracle.add("Cat");
    oracle.add("Dog");
    oracle.add("Horse");
    oracle.add("Canary");
    SuggestBox box = new SuggestBox(oracle);
    RootPanel.get().add(box);
    }
}

问题是我希望建议列表出现在文本框的顶部,而不是底部。

有没有办法做到这一点?

如果没有,在GWT中是否有任何替代SuggestBox的方法?(我成功地将jQuery的{{link1:autocompletion}}小部件配置为显示在文本框的顶部,但将其与GWT集成似乎既不优雅也不高效...)

谢谢!

1个回答

3

我认为没有内置的方法可以实现这一点,但是我认为通过一些工作可以完成。 SuggestBox 有一个以 SuggestionDisplay 为参数的构造函数。所以你可以继承 DefaultSuggestionDisplay 并覆盖其 showSuggestions() 方法来在你想要的位置显示弹出窗口。


1
请注意,计算正确位置所需的大部分代码已经存在:如果SuggestBox靠近窗口底部,则会自动显示在顶部。 代码位于PopupPanel.position()中。由于此方法是私有的,因此无法覆盖它,但您可以覆盖PopupPanel.showRelativeTo(final UIObject target),并只使用略微改编的position()版本。还要覆盖DefaultSuggestionDisplay.createPopup()以使用您的弹出窗口。 - Chris Lercher
谢谢Chris!你说得对,代码已经在那里了,我只需要修改它。不幸的是,我无法覆盖PopupPanel.showRelativeTo(final UIObject target),因为它是一个final方法。我找不到其他合适的选项,有什么想法吗? - Mike
@Mike:我完全忽略了final修饰符。在这种情况下,最好重写DefaultSuggestionDisplay.showSuggestions(),就像David已经写的那样。你仍然可以重用大部分PopupPanel.position()的代码... - Chris Lercher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接