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();
Другие вопросы по тегам