更新自动完成 JavaFx?
Update autoComplete JavaFx?
我目前正在使用 ControlFx 的 Autcomplete TextField 开发 JavaFX project.I。每次我在数据库 table 中添加新行时,它都应该更新 Autocomplete ,我这样做了,但我的问题是显示双 Context-Menu ,我们可以说双自动完成,因为我调用创建自动完成的方法,每次在 table.[=15 中添加新元素=]
当我单击一个选项卡时 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));
}
如何删除旧的自动完成并绑定新的自动完成?
这样做可以解决问题:
而不是:TextFields.bindAutoCompletion(textField, list);
,试试这个:
List<String> strings = new ArrayList<>();
然后通过以下方式在您的 textField 与列表之间创建绑定:
new AutoCompletionTextFieldBinding<>(textField, SuggestionProvider.create(strings));
因此,任何更改(包括从列表中删除)都将反映在 textField 的自动完成中;
当用户在 textField 中输入一些文本时,您将动态过滤建议,显示在弹出窗口中;
前段时间我遇到了同样的问题,我尝试按照@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));
}
无论如何,如果您需要保留 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,我们有 "updated" 自动完成值。
为避免建议菜单加倍,请勿再次使用(第二次):
TextFields.bindAutoCompletion(..)
为了提供对自动完成建议列表的更新,保留对 SuggestionProvider 的引用并改为更新建议提供者:
TextField textField = new TextField();
SuggestionProvider suggestionProvider = SuggestionProvider.create(new ArrayList());
new AutoCompletionTextFieldBinding<>(textField, suggestionProvider);
当您要更新建议列表时:
List<String> newSuggestions = new ArrayList();
//(add entries to list)
suggestionProvider.clearSuggestions();
suggestionProvider.addPossibleSuggestions(newSuggestions);
我目前正在使用 ControlFx 的 Autcomplete TextField 开发 JavaFX project.I。每次我在数据库 table 中添加新行时,它都应该更新 Autocomplete ,我这样做了,但我的问题是显示双 Context-Menu ,我们可以说双自动完成,因为我调用创建自动完成的方法,每次在 table.[=15 中添加新元素=]
当我单击一个选项卡时 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));
}
如何删除旧的自动完成并绑定新的自动完成?
这样做可以解决问题:
而不是:TextFields.bindAutoCompletion(textField, list);
,试试这个:
List<String> strings = new ArrayList<>();
然后通过以下方式在您的 textField 与列表之间创建绑定:
new AutoCompletionTextFieldBinding<>(textField, SuggestionProvider.create(strings));
因此,任何更改(包括从列表中删除)都将反映在 textField 的自动完成中; 当用户在 textField 中输入一些文本时,您将动态过滤建议,显示在弹出窗口中;
前段时间我遇到了同样的问题,我尝试按照@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));
}
无论如何,如果您需要保留 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,我们有 "updated" 自动完成值。 为避免建议菜单加倍,请勿再次使用(第二次):
TextFields.bindAutoCompletion(..)
为了提供对自动完成建议列表的更新,保留对 SuggestionProvider 的引用并改为更新建议提供者:
TextField textField = new TextField();
SuggestionProvider suggestionProvider = SuggestionProvider.create(new ArrayList());
new AutoCompletionTextFieldBinding<>(textField, suggestionProvider);
当您要更新建议列表时:
List<String> newSuggestions = new ArrayList();
//(add entries to list)
suggestionProvider.clearSuggestions();
suggestionProvider.addPossibleSuggestions(newSuggestions);