javafx组合框可编辑自动完成

标签 java javafx controlsfx

我创建了一个组合框,其中添加了条目列表。我已将此组合框设置为可编辑和自动完成。问题如下

1)我使用鼠标单击从下拉列表中选择了 Arial 值。

2) 之后,我输入 black,并使用 Enter 按钮从结果列表中选择 Arial Black。

3)然后,我再次使用鼠标单击单击了 Arial 值,Arial 值被选中,但即使我选择了该值,结果列表也会再次显示。

我想在单击鼠标选择值时隐藏结果列表。结果列表只不过是 ComboBoxPopupControl。我尝试使用 dispose 方法,但它不起作用。任何人都可以建议单击comboBox.setOnAction 时的代码。

enter image description here

这是代码

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

    }

}

最佳答案

您可以尝试小型实用程序库 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();

关于javafx组合框可编辑自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48886510/

相关文章:

java - Android SkImageDecoder::Factory 在解码图像时返回 null

java - GWT 菜单栏在鼠标移出时隐藏

java - 斯波克错误 :Groovyc: Could not instantiate global transform class

user-interface - JavaFX-如何创建简单的自定义绘制控件?

Java:作为 JAR 运行时的文件路径

java - ListView 选择模型的 validator ?

java - 解决java中的空字符串

java - 在 JavaFX 中单击按钮时更改文本框中的文本

带有controlsfx通知组件的javafx NullPointerException

java - JavaFX ControlsFX 对话框中的 Action 按钮 css 样式