2017-08-20 103 views
8

Şu anda bir JavaFX projesi üzerinde çalışıyorum. ControlFx'un Tamamlanmamış TextField'ını kullanıyorum. Her zaman veritabanı tablosuna yeni satırlar ekliyorum, Autocomplete'ı güncellemeli, bunu yaptım ama problemim çift Context-Menu gösteriliyor, iki otomatik tamamlama diyebiliriz çünkü tablodaki yeni öğelerin her birini ekleyerek otomatik tamamlama yöntemini çağırırım.Güncelleme otoComplete JavaFx?

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 yöntemi(): i bir sekmeyi editBill tıkladığınızda

ben bu yöntemi çağırın ben yaşlı otomatik tamamlama kaldırmak ve yeni automplete bağlayabilir nasıl

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)); 

} 

?

Description of problem

cevap

2

Sadece böylece kullanımından kaçınmanın AutoCompletionTextFieldBinding nesnenin örneğini tutmak gerekiyorsa her halükarda: örneğini değişecek

autoCompleteBinding = TextFields.bindingAutoCompletion(TextField,List); 

, biz biraz daha derine gidebilir ve bunu kullanabilir:

// 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 aracılığıyla, otomatik tamamlama değerlerini "güncelledik". (2 kez) tekrar kullanmayın, öneriler menüsünün iki katına önlemek için: Hala

TextFields.bindAutoCompletion(..) 
+0

Teşekkürler.Bu iyi çalışıyor :) –

+0

Mükemmel cevap, teşekkür ederim. –

+0

Bu yanıt, AutoComplete'ın birçok sorununu çözmeme yardımcı oldu, çok teşekkürler. –

0

Bu hile olacaktır: yerine: TextFields.bindAutoCompletion(textField, list); , şunu deneyin:

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

Sonra aracılığıyla liste ile TextField arasındaki bağlayıcı oluşturun:

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

Listeden kaldırmayı da içeren tüm değişiklikler yansıtılacaktır. textField'ın otomatik olarak tamamlanmasında Ve kullanıcı textField içinde bir metin girdiğinde, pop-up gösterdi önerilerin dinamik filtreleme olacak;

+0

Aynı sorun. –

0

Aynı problemi bir süre önce @MaxKing'den bahsetmeyi denedim, ama işe yaramadı. Doğru yol olduğunu düşünmese bile bir çözüm vermeyi başardım.

//) (eski bağlayıcı atın ve yeni bir bağlama

autoCompleteBinding.dispose yeniden;

autoCompleteBinding = TextFields.bindingAutoCompletion (TextField, List);

bu deneyin:

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

çalışmıyor, aynı sorun. –