如何在 JavaFx 中自定义自动完成文本字段建议
How to Customize auto complete text field suggestion in JavaFx
我正在使用可以找到的 ControlFx 文本字段绑定。问题是包含输入值的建议弹出值。就像我输入 "M" 值将是 "Emma"、"max"、"rosemary"、"Mathew"。所以我的主要问题是如何提出建议,只提出以 "M" 开头的值,例如 "max"、"Mathew"
这是我的代码。它 select 从数据库中命名并将它们添加到 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);
这是一个演示您的问题的示例应用程序。
此代码段在原始列表中搜索子字符串,returns 列表中以该子字符串开头的每个项目。
此代码段应该适用于您的代码。
Key code:
TextFields.bindAutoCompletion(textFieldSearch, t -> {
return list.stream().filter(elem ->
{
return elem.toLowerCase().startsWith(t.getUserText().toLowerCase());
}).collect(Collectors.toList());
});
Full app:
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);
}
}
我正在使用可以找到的 ControlFx 文本字段绑定。问题是包含输入值的建议弹出值。就像我输入 "M" 值将是 "Emma"、"max"、"rosemary"、"Mathew"。所以我的主要问题是如何提出建议,只提出以 "M" 开头的值,例如 "max"、"Mathew" 这是我的代码。它 select 从数据库中命名并将它们添加到 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);
这是一个演示您的问题的示例应用程序。
此代码段在原始列表中搜索子字符串,returns 列表中以该子字符串开头的每个项目。 此代码段应该适用于您的代码。
Key code:
TextFields.bindAutoCompletion(textFieldSearch, t -> {
return list.stream().filter(elem ->
{
return elem.toLowerCase().startsWith(t.getUserText().toLowerCase());
}).collect(Collectors.toList());
});
Full app:
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);
}
}