【问题标题】:How to Customize auto complete text field suggestion in JavaFx如何在 JavaFx 中自定义自动完成文本字段建议
【发布时间】:2018-11-02 20:38:21
【问题描述】:

我正在使用可以找到的 ControlFx 文本字段绑定。问题是包含输入值的建议弹出值。就像如果我输入“M”值将是“Emma”、“max”、“rosemary”、“Mathew”。所以我的主要问题是如何提出建议只带出以“M”开头的值,如“max”、“Mathew” 这是我的代码。它从数据库中选择名称并将它们添加到 ArrayList

PreparedStatement ps=db.DataBase.getCon().prepareStatement("select name from STUDENTINFO");
ResultSet res=ps.executeQuery();

        List list=new ArrayList();
        while(res.next()){
            list.add(res.getString("name"));
        }
        TextFields.bindAutoCompletion(textfieldSearch,list);

【问题讨论】:

    标签: java javafx autocomplete controlsfx


    【解决方案1】:

    这是一个演示您的问题的示例应用。

    此 sn-p 在原始列表中搜索子字符串并返回列表中以该子字符串开头的每个项目。 这个 sn-p 应该适用于您的代码。

    关键代码:

    TextFields.bindAutoCompletion(textFieldSearch, t -> {
        return list.stream().filter(elem -> 
        {
            return elem.toLowerCase().startsWith(t.getUserText().toLowerCase());
        }).collect(Collectors.toList());
    });
    

    完整应用:

    import java.util.ArrayList;
    import java.util.List;
    import java.util.stream.Collectors;
    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.TextField;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;
    import org.controlsfx.control.textfield.TextFields;
    
    /**
     *
     * @author blj0011
     */
    public class JavaFXApplication193 extends Application
    {
    
        @Override
        public void start(Stage primaryStage)
        {
            List<String> list = new ArrayList();
            list.add("Max");
            list.add("moon");
            list.add("am");
            list.add("two");
    
            TextField textFieldSearch = new TextField();
            TextFields.bindAutoCompletion(textFieldSearch, t -> {
                return list.stream().filter(elem
                        -> {
                    return elem.toLowerCase().startsWith(t.getUserText().toLowerCase());
                }).collect(Collectors.toList());
            });
    
            StackPane root = new StackPane(textFieldSearch);
            Scene scene = new Scene(root, 300, 250);
    
            primaryStage.setTitle("Hello World!");
            primaryStage.setScene(scene);
            primaryStage.show();
        }
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args)
        {
            launch(args);
        }
    
    }
    

    【讨论】:

    • 感谢您的回复。但是我得到一个错误,上面写着不兼容的类型:无法推断类型变量 T(参数不匹配;lambda 表达式中的错误返回类型对象无法转换为 Collection)其中 T 是类型变量:T 扩展对象在方法 bindAutoCompletion(TextField,Callback>) 中声明 bindAutoCompletion(TextField,Callback>) 的类型是错误的我使用 netbeans IDE
    • String 类型添加到您的列表中。它应该看起来像我的
    • 哦。钻石参考,我看到了我的错误。谢谢
    • 很奇怪:我遇到了同样的错误。我必须导入java.util.stream.Collectors
    猜你喜欢
    • 2012-12-21
    • 1970-01-01
    • 2019-10-25
    • 2020-07-12
    • 2020-05-17
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    相关资源
    最近更新 更多