Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javafx组合框可编辑自动完成_Java_Javafx_Controlsfx - Fatal编程技术网

javafx组合框可编辑自动完成

javafx组合框可编辑自动完成,java,javafx,controlsfx,Java,Javafx,Controlsfx,我创建了一个组合框,可以添加条目列表。我已经将这个组合框设置为可编辑和自动完成。问题如下 1) 我使用鼠标单击从下拉列表中选择了Arial值 2) 之后,我键入黑色,并从结果列表中使用enter按钮选择Arial black 3) 然后,我再次使用鼠标单击Arial值,Arial值被选中,但结果列表将再次显示,即使我选择了该值 我想隐藏点击鼠标选择值的结果列表。结果列表只是ComboBoxPopupControl。我试着用这个方法,但没用。单击comboBox.setOnAction,任何人都可

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

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

2) 之后,我键入黑色,并从结果列表中使用enter按钮选择Arial black

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

我想隐藏点击鼠标选择值的结果列表。结果列表只是ComboBoxPopupControl。我试着用这个方法,但没用。单击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());

    }

}
java.util.ArrayList;
导入java.util.List;
导入org.controlsfx.control.textfield.TextFields;
导入javafx.application.application;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.event.EventType;
导入javafx.scene.Group;
导入javafx.scene.scene;
导入javafx.scene.control.ComboBox;
导入javafx.scene.input.KeyCode;
导入javafx.scene.input.KeyEvent;
导入javafx.scene.input.MouseEvent;
导入javafx.stage.stage;
public class TestAutoTextSearch\u bkp扩展应用程序{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
发射();
}
@凌驾
public void start(Stage primaryStage)引发异常{
列表国家=新的ArrayList();
国家。添加(“Arial”);
添加(“Arial黑色”);
国家。添加(“Arial窄”);
ComboBox ComboBox=新建ComboBox();
comboBox.getItems().addAll(国家/地区);
ComboBox comboBox1=新建ComboBox();
comboBox.setEditable(真);
comboBox.setMaxWidth(Double.MAX_值);
setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
//尝试在此处使用处置方法,但力不从心[![在此处输入图像描述][1][1]
}
});
comboBox.getEditor().setOnKeyPressed(新的EventHandler()){
@凌驾
公共无效句柄(KeyEvent ke){
KeyCode kc=ke.getCode();
System.out.println(“内部按键”);
if((kc.isleterkey())| | kc.isArrowKey()| | kc.equals(KeyCode.BACK_空格)){
TextFields.bindAutoCompletion(comboBox.getEditor()、comboBox.getItems());
}}
});
组根=新组();
root.getChildren().add(组合框);
场景=新场景(根);
初级阶段。场景(场景);
primaryStage.show();
comboBox.setMinWidth(comboBox.getWidth());
comboBox.setPrefWidth(comboBox.getWidth());
}
}

您可以尝试使用小型实用程序库中的解决方案


如果用鼠标单击
Arial Black
,然后单击
Arial
,就会发生这种情况。我猜它是想给你显示不同的选项,就像你在字段中键入一样。我是唯一一个试图把小窗口拖到一边的人吗?为图书馆做广告,你的?无论如何,请不要对多个问题给出相同的答案。发布一个好的答案,然后投票/标记以重复结束其他问题。如果问题不是重复的,请根据问题量身定做答案。谢谢你的建议。图书馆是我的。我在应用程序中使用它。它是免费的,所以我没有任何利润。
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();