2015-12-28 41 views
1

如何從AutoComplete TextField中獲取完整的選定文本?Codename One - 從AutoComplete中獲取所選文本

如果我使用getText(),我只能得到用戶迄今輸入的幾個字母。

例子:我寫 「FLO」,然後從列表中選擇 「花」,但gettext的()給我 「FLO」

AutoCompleteTextField auto = new AutoCompleteTextField(arrayWithNames); 
auto.setMinimumLength(4); 
auto.addListListener((ActionEvent evt1) -> { 
    String lookedFor = auto.getText(); 
    Hashtable<String,Object> match[] = findMatch(lookedFor); 
    if(hMatch.length>0){ 
     contElements.removeAll(); 
     for (Hashtable<String, Object> Match1 : match) { 
      ... 
      ...//fill the Container with the names found 
      ... 
     } 
    } 
}); 

它是如何工作

我現在用的是自動完成TF作爲搜索按鈕。 我有一個列表中的所有名稱的數組。 然後我用數組填充Auto。 用戶從Auto中選擇一個名稱,然後使用findMatch()搜索正在「正在查找」的值。它返回一個新的數組與發現的條目。

我需要從列表中的完整名稱,所以我可以使用findMatch()方法,但是當我從Auto中使用getText()時,它只返回用戶輸入的字母,而不是全名,所以我的方法不起作用,因爲我在比較整個字符串。 (我使用的汽車,因爲它是非常方便的,如果人們只記住他們正在尋找的名稱的一部分)

回答

0

我不知道你正在使用AutoCompleteTextBox正確。

的AutoCompleteText箱的整個目的是幫助你幫助用戶從合法的請求列表中進行選擇,

你不應該得到的getText()的值,直到用戶準備提交形式,其中AutoCompleteTB位於。

這將幫助,如果你還沒有看這裏: https://www.codenameone.com/javadoc/com/codename1/ui/AutoCompleteTextField.html#getPropertyTypes--

祝你好運!

+0

我只是做了你在第一行提到的內容。我將監聽器添加到了AutoComplete TF中,當我從列表中選擇一個項目時,它確實會觸發getText()方法,但不是從列表中返回完整的選定值,而只是獲取我在鍵盤上按下的幾個字母:「hou」而不是「House」,「pita」而不是「Hospital」等 – Felipe

+1

'public void addListListener(ActionListener a)' 添加一個動作偵聽器,當選擇自動完成列表中的條目時觸發事件。注意,這個方法只有在彈出窗口被重新顯示時纔會生效,如果在彈出窗口已經顯示的時候調用它,它將不起作用。 當他們從ACTF中選擇一個項目然後重新繪製列表模型以反映這個事件時,這個事件將會觸發。用戶在內部選擇輸入,並且ACTF更新TextField的內容;即你不必自己做這件事。 –

+0

另一種方法是使用'keyPress'事件,然後設置一個變量來切換鍵擊,以確定用戶何時選擇了自動完成項目,並確定用戶選擇的索引以獲取自動完成從'getCompletion()'列出模型文本。 –

1

如果您子類AutoCompleteTextField您可以通過getSuggestionModel().getItemAt(getSuggestionModel().getSelectedIndex())在內部訪問選定的文本。現在你可以在你的派生類中定義一個public獲取方法getSelectedText()或其他東西。