關於JavaFX拓展控件庫ControlsFx的AutoCompletionBinding的使用

首先是API文檔    controlsfx官方

然後,選擇  HomePage

這裏有兩個版本,部分控件在兩個版本存在新的功能方法。如AutoCompletionBinding抽象類,在8.4版本支持對動態下拉匹配框顯示的個數可控,而之前版本則不支持這個方法。


setVisibleRowCount(int value)//用於顯示下拉匹配的行數

附上示例代碼:
public class TestAutoBing extends Application{
 
 @Override
 public void start(Stage primaryStage) throws Exception {
  primaryStage.setTitle("測試用");
  //測試帶有自動清除按鈕的TextField
//  primaryStage.setScene(testClearableTextField());
  //測試動態匹配下拉列表
  primaryStage.setScene(testAutoCompletionBingdingTextField());
  primaryStage.show();
 }
 
 public static void main(String[] args) {
  launch(args);
 }
 
 public Scene testClearableTextField(){
  //帶清除按鈕的文本框
  TextField textClearable= TextFields.createClearableTextField();
  StackPane root = new StackPane();
  root.getChildren().add(textClearable);
  Scene scene = new Scene(root,300,300);
  return scene;
 }
 
 public Scene testAutoCompletionBingdingTextField(){
  List list = new ArrayList();
  list.add("123456");
  list.add("123567");
  list.add("123678");
  list.add("456123");
  list.add("456234");
  list.add("456345");
  list.add("789456");
  list.add("788567");
  list.add("123444");
  list.add("123445");
  list.add("123555");
  list.add("123556");
  list.add("123666");
  list.add("123667");
  list.add("123677");
  list.add("456777");
  list.add("456788");
  list.add("456888");
  list.add("456889");
  list.add("456999");
  list.add("789444");
  list.add("789455");
  list.add("789466");
  list.add("789566");
  list.add("123745");
  list.add("123756");
  list.add("123765");
  list.add("123764");
  list.add("123546");
  list.add("456213");
  list.add("456231");
  list.add("123879");
  list.add("123897");
  list.add("123978");
  list.add("123987");
  TextField textField = new TextField();
  AutoCompletionBinding textAutoBingding = TextFields.bindAutoCompletion(textField, FXCollections.observableArrayList(list));
  textAutoBingding.setVisibleRowCount(3);
  StackPane root = new StackPane();
  root.getChildren().add(textField);
  Scene scene = new Scene(root,300,800);
  return scene;
 }
}
執行結果如下:


功能要求:
點擊按鈕刪除動態匹配的下拉元素
public class TestAutoBing extends Application{
 AutoCompletionBinding textAutoBingding =null;
 @Override
 public void start(Stage primaryStage) throws Exception {
  primaryStage.setTitle("測試用");
  //測試帶有自動清除按鈕的TextField
//  primaryStage.setScene(testClearableTextField());
  //測試動態匹配下拉列表
  primaryStage.setScene(testAutoCompletionBingdingTextField());
  primaryStage.show();
 }
 
 public static void main(String[] args) {
  launch(args);
 }
 
 public Scene testClearableTextField(){
  //帶清除按鈕的文本框
  TextField textClearable= TextFields.createClearableTextField();
  StackPane root = new StackPane();
  root.getChildren().add(textClearable);
  Scene scene = new Scene(root,300,300);
  return scene;
 }
 
 public Scene testAutoCompletionBingdingTextField(){
  List list = new ArrayList();
  list.add("aaaa");
  list.add("aabb");
  list.add("abcc");
  TextField textField = new TextField();
  ObservableList lsitObservable = FXCollections.observableArrayList(list);
  textAutoBingding = TextFields.bindAutoCompletion(textField, lsitObservable);
  textAutoBingding.setVisibleRowCount(3);
  VBox root = new VBox();
  root.getChildren().add(textField);
  Button btnRemove = new Button("刪除");
  btnRemove.setOnAction(new EventHandler() {
   public void handle(ActionEvent event) {
    //下面3行實現動態改變綁定下拉匹配列表
    lsitObservable.remove(textField.getText());//刪除文本框中選中元素
    textAutoBingding.dispose();//解除綁定關係
    //重新綁定關係,因爲ObservableList lsitObservable是動態集合,元素隨操作即時變化。
    textAutoBingding=TextFields.bindAutoCompletion(textField,lsitObservable);
    System.out.println("執行刪除");
   };
  });
  root.getChildren().add(btnRemove);
  Scene scene = new Scene(root,300,300);
  return scene;
 }
}


首先執行刪除"aaaa",然後再次清空輸入,發下下拉匹配列表中 "aaaa",已經不存在了;若全部刪除則匹配列表爲空。








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章