2012-07-04 66 views
3

我使用GWT一個SuggestBox創建一個不錯的建議列表這樣的文本框的位置: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的autocompletion小部件以顯示在文本框的頂部,但將它與GWT集成似乎既不優雅也不高效......)

謝謝!

回答

3

我不認爲有任何內置的方式來做到這一點,但我認爲這可以通過一些工作來完成。 SuggestBox有一個構造函數,它需要SuggestionDisplay作爲參數。因此,您可以繼承DefaultSuggestionDisplay並覆蓋其showSuggestions()方法以顯示所需的彈出窗口。

+1

+1請注意,計算正確位置所需的大部分代碼已經存在:如果SuggestBox靠近窗口的底部,它會自動顯示在頂部。代碼在'PopupPanel.position()'中。由於這個方法是私有的,所以它不能被重寫,但是你可以重載'PopupPanel.showRelativeTo(最終的UIObject目標)',並且只使用一個稍微改變的'position()'版本。還要重寫'DefaultSuggestionDisplay.createPopup()'以使用彈出窗口。 –

+0

謝謝Chris!,你說得對,代碼已經存在,我只需要修改它。不幸的是,我不能重寫'PopupPanel.showRelativeTo(最終的UIObject目標)',因爲它是最後的方法。我找不到其他合適的選擇,有什麼想法? – Mike

+0

@Mike:我完全忽略了最後的修飾語。在這種情況下,最好重寫'DefaultSuggestionDisplay.showSuggestions()',就像David已經寫過的那樣。您仍然可以重新使用PopupPanel.position()的大部分代碼... –