2017-08-20 3 views
8

Ich arbeite derzeit an einem JavaFX-Projekt.Ich verwende Automplete TextField von ControlFx .Jedes Mal, wenn ich neue Zeilen in der Datenbanktabelle hinzufügen, sollte es Autocomplete zu aktualisieren, ich tat dies, aber mein Problem zeigt doppelte Context-Menü, können wir doppelte Autocomplets sagen, weil ich Methode aufrufen, die jedes Hinzufügen von neuen Elementen in der Tabelle automatisch vervollständigen.Aktualisieren Sie AutoComplete JavaFx?

Wenn ich auf eine Registerkarte klicken editBill i rufen Sie diese Methode:

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 Methode():

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

} 

Wie ich die alte Autovervollständigung entfernen und neue automplete binden ?

Description of problem

Antwort

2

Gerade in jedem Fall, wenn Sie Instanz AutoCompletionTextFieldBinding Objekt halten müssen, damit Gebrauch zu vermeiden:

autoCompleteBinding = TextFields.bindingAutoCompletion(TextField,List); 

, welche die Instanz ändern, wir könnte ein wenig tiefer gehen und verwenden Sie dies:

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

Also, durch SuggestionProvider haben wir die Autovervollständigungswerte "aktualisiert". Um eine Verdoppelung des Vorschlagsmenüs zu vermeiden, nicht erneut verwenden (zum 2. Mal):

TextFields.bindAutoCompletion(..) 
TextFields.bindAutoCompletion(..) 
+0

Danke.Das funktioniert gut :) –

+0

Perfekte Antwort, danke. –

+0

Diese Antwort hat mir geholfen, viele Probleme von AutoComplete zu lösen, vielen Dank. –

0

Dies wird den Trick: Statt: TextFields.bindAutoCompletion(textField, list); , versuchen Sie dies:

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

Dann zwischen dem Textfeld mit der Liste durch create Bindung:

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

So werden alle Änderungen, einschließlich Entfernen, aus der Liste reflektiert get in der AutoCompletion des textField; Und Sie werden dynamische Filterung von Vorschlägen haben, die in Pop-up angezeigt werden, wenn Benutzer Text in TextField eingeben;

+0

Immer noch das gleiche Problem. –

0

Ich hatte das gleiche Problem vor einiger Zeit versuche ich als @MaxKing Erwähnungen zu tun, aber es hat nicht funktioniert. Ich habe es geschafft, es zu lösen, obwohl ich nicht glaube, dass es der richtige Weg ist.

// Entsorgen Sie die alte Bindung und erstellen Sie eine neue Bindung

autoCompleteBinding.dispose();

autoCompleteBinding = TextFields.bindingAutoCompletion (TextField, Liste);

versuchen Sie dies:

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

es funktioniert nicht, das gleiche Problem. –

Verwandte Themen