
Мне нужно иметь возможность полностью отвязать текстовое поле от старого списка и привязать его автозаполнение к новый список. Кажется, абстрактный метод, который я использую, dispose() ничего не делает в стандартном классе AutoCompletionBinding?
Код: Выделить всё
AutoCompletionBinding clientBinding;
private void getClientAutoComplete(TextField clientNameTextField) {
String input = clientNameTextField.getText().toUpperCase();
if (input.length() < 2 && clientBinding != null) {
clientBinding.dispose();
} else if (input.length() == 2) {
var queryTask = SimpleCypher.getClientAutoComplete(input);
queryTask.setOnSucceeded(event -> {
AutoCompletionBinding clientBinding = TextFields.bindAutoCompletion(clientNameTextField, queryTask.getValue());
clientBinding.setOnAutoCompleted(e -> getClientData(e.getCompletion().getId()));
});
// Start the task asynchronously
Thread queryThread = new Thread(queryTask);
queryThread.setDaemon(true); // Set as daemon thread to allow application exit
queryThread.start();
}
}
Код: Выделить всё
public static Task[*]> getClientAutoComplete(String input){
Task task = new Task() {
@Override
protected List call() throws Exception {
List resultClients = new ArrayList();
try (Session session = DatabaseConnection.getSession()) {
Result result = session.run(
"""
MATCH (n:Client)
WHERE toUpper(n.name) CONTAINS $textFieldInput
RETURN n.id AS id
, n.name AS name
, n.phone AS num
""",
Values.parameters("textFieldInput", input));
while (result.hasNext()) {
Record record = result.next();
resultClients.add(
new Client(
record.get("id").asInt(),
record.get("name").asString(),
record.get("num").isNull() ? null : record.get("num").asString()
));
}
}
return resultClients;
}
};
task.setOnFailed(event -> SimpleCypher.handleQueryError(event));
return task;
}
Вот что у меня есть на данный момент для реализации, но я не уверен, что именно мне нужно вложить в реализацию, чтобы она заработала?:
Код: Выделить всё
import java.util.Collection;
import org.controlsfx.control.textfield.AutoCompletionBinding;
import javafx.scene.Node;
import javafx.util.Callback;
import javafx.util.StringConverter;
public class Neo4jAutoCompletionBinding extends AutoCompletionBinding {
protected Neo4jAutoCompletionBinding(Node completionTarget,
Callback suggestionProvider, StringConverter converter) {
super(completionTarget, suggestionProvider, converter);
// TODO Auto-generated constructor stub
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
@Override
protected void completeUserInput(T completion) {
// TODO Auto-generated method stub
}
}
- Я пытался удалить предыдущие привязки автозаполнения каждый раз при запуске нового запроса. Но это не сработало, все привязки остались.
- Я пробовал привязываться к ObservableList, где ObservableList получал результаты запроса задачи Javafx, но привязка никогда не обновлялась, чтобы показать новые добавленные ценности. Он будет привязан к пустому списку и останется таким, несмотря на то, что ObservableList добавит новые значения из базы данных.

Подробнее здесь: https://stackoverflow.com/questions/790 ... licate-con