2017-08-20 112 views
8

我目前正在研究一個JavaFX項目。我使用的自動完成TextField的ControlFx。每當我在數據庫表中添加新行時,它應該更新自動完成,我這樣做但我的問題顯示雙重上下文菜單,我們可以說double autocompletes,因爲我調用創建自動完成每個表中添加新元素的方法。更新autoComplete JavaFx?

當我點擊一個標籤editBill我把這種方法:

public void showEditBill() { 

     if (!BillPane.getTabs().contains(EditBillTab)) { 

      BillPane.getTabs().add(EditBillTab); 

     } 
     SingleSelectionModel<Tab> selectionModel = BillPane.getSelectionModel(); 
     selectionModel.select(EditBillTab); 
     /*it should remove the old autocomplete from textfield*/ 
     pushBills(); //Call for cheking new items 
    } 

pushBills()的方法:

public void pushBills() { 

    ArrayList list = new ArrayList<>(); 

    bills = new BillHeaderDao().FindAll(); 

    for (int i = 0; i < bills.size(); i++) { 

     list.add(bills.get(i).getIdClient()); 

    } 
    //How can i remove the old bind before bind again 
    autoCompletionBinding = TextFields.bindAutoCompletion(SearchBill, SuggestionProvider.create(list)); 

} 

如何刪除舊的自動完成,並結合新的automplete ?

Description of problem

回答

2

只是如果您需要保持AutoCompletionTextFieldBinding對象的實例,從而避免使用任何情況下:

autoCompleteBinding = TextFields.bindingAutoCompletion(TextField,List); 

,這將改變例如,我們可以走得更深一點,並使用此:

// let's suppose initially we have this possible values: 
Set<String> autoCompletions = new HashSet<>(Arrays.asList("A", "B", "C")); 
SuggestionProvider<String> provider = SuggestionProvider.create(autoCompletions); 
new AutoCompletionTextFieldBinding<>(textField, provider); 

// and after some times, possible autoCompletions values has changed and now we have: 
Set<String> filteredAutoCompletions = new HashSet<>(Arrays.asList("A", "B")); 

provider.clearSuggestions(); 
provider.addPossibleSuggestions(filteredAutoCompletions); 

因此,通過SuggestionProvider,我們已經「更新」了自動完成值。 爲了避免建議菜單的加倍,不要再使用(第2次):

TextFields.bindAutoCompletion(..) 
+0

謝謝。這工作正常:) –

+0

完美的答案,謝謝。 –

+0

這個答案幫助我解決了很多AutoComplete問題,非常感謝。 –

0

這將這樣的伎倆: 相反的:TextFields.bindAutoCompletion(textField, list); ,試試這個:

List<String> strings = new ArrayList<>(); 

然後創建您的文本字段之間用列表通過綁定:

new AutoCompletionTextFieldBinding<>(textField, SuggestionProvider.create(strings)); 

因此,任何更改(包括從列表中刪除)都將被反映在textField的autoCompletion中完成; 當用戶在textField中輸入一些文本時,您將對動態過濾建議進行彈出顯示;

+0

還是同樣的問題。 –

0

我前一段時間有同樣的問題,我嘗試做的@MaxKing提到,但它沒有工作。儘管我不認爲這是正確的方法,但我設法給它一個解決方案。

//棄置舊結合並重新創建一個新的結合

autoCompleteBinding.dispose();

autoCompleteBinding = TextFields.bindingAutoCompletion(TextField,List);

試試這個:

public void pushBills() { 

     ArrayList list = new ArrayList<>(); 

     bills = new BillHeaderDao().FindAll(); 

     for (int i = 0; i < bills.size(); i++) { 

      list.add(bills.get(i).getIdClient()); 

     } 
     autoCompletionBinding .dispose(); 
     autoCompletionBinding = TextFields.bindAutoCompletion(SearchBill, SuggestionProvider.create(list)); 
    } 
+0

它不工作,同樣的問題。 –