javafx combobox редактируемое автозаполнение
Я создал поле со списком, который добавляет список записей. Я сделал это поле со списком редактируемым и автозаполненным. Вопрос заключается в следующем
1) Я выбрал значение Arial из выпадающего списка, используя щелчок мышью.
2) После этого я набрал черный и из списка результатов я выбрал Arial Black, используя кнопку ввода.
3) Затем я снова щелкнул мышью по значению Arial, щелкнув мышью, значение Arial было выбрано, но вместе с ним снова отображается список результатов, хотя я выбрал значение.
Я хочу, чтобы скрыть список результатов по щелчку мыши выбора значения. Список результатов - это не что иное, как ComboBoxPopupControl. Я пытался использовать метод dispose, но он не работал. Может кто-нибудь предложить код по нажатию comboBox.setOnAction.
Вот код
java.util.ArrayList;
import java.util.List;
import org.controlsfx.control.textfield.TextFields;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.event.EventType;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;
public class TestAutoTextSearch_bkp extends Application {
public static void main(String[] args) {
// TODO Auto-generated method stub
launch();
}
@Override
public void start(Stage primaryStage) throws Exception {
List<String> countries = new ArrayList<>();
countries.add("Arial");
countries.add("Arial Black");
countries.add("Arial Narrow");
ComboBox<String> comboBox = new ComboBox();
comboBox.getItems().addAll(countries);
ComboBox<String> comboBox1 = new ComboBox();
comboBox.setEditable(true);
comboBox.setMaxWidth(Double.MAX_VALUE);
comboBox.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
//Tried dispose method here but dint worked[![enter image description here][1]][1]
}
});
comboBox.getEditor().setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent ke) {
KeyCode kc = ke.getCode();
System.out.println("Inside Key Press");
if ((kc.isLetterKey())||kc.isArrowKey()||kc.equals(KeyCode.BACK_SPACE)) {
TextFields.bindAutoCompletion(comboBox.getEditor(), comboBox.getItems());
}}
});
Group root = new Group();
root.getChildren().add(comboBox);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
comboBox.setMinWidth(comboBox.getWidth());
comboBox.setPrefWidth(comboBox.getWidth());
}
}
0 ответов
Вы можете попробовать решение из небольшой утилиты библиотеки jalvafx
List<String> items = Arrays.asList("Mercury",
"Venus",
"Earth",
"Mars",
"Jupiter",
"Saturn",
"Neptune");
ComboBoxCustomizer.create(comboBox)
.autocompleted(items)
.customize();
По умолчанию дважды щелкните, чтобы очистить значение.
Есть и другие полезные функции. Вы можете добавить дополнительные столбцы или глифы, выделить отдельные элементы, изменить элементы по умолчанию для представления строки...
ComboBoxCustomizer.create(comboBox)
.autocompleted(items)
.overrideToString(o -> "planet: " + o)
.multyColumn(o -> Arrays.asList("column 2", "column 3"))
.emphasized(o -> o.endsWith("s"))
.customize();