ListView关于五种数据类型的加载
普通数据类型(以String为例)
添加数据到ListView中
ListView<String> listView = new ListView<>(); listView.setPrefWidth(300); listView.setPrefHeight(300); listView.setLayoutX(100); listView.setLayoutY(100); ObservableList<String> observableList = listView.getItems(); observableList.add("data - a"); observableList.add("data - v"); observableList.add("data - s"); observableList.add("data - e"); observableList.add("data - x"); observableList.add("data - n");
操作observableList
// 修改指定位置的数据(更新界面) observableList.set(0,"dasdasda"); // 在指定位置添加数据(更新界面) observableList.add(0, "dadasdasd"); // 删除指定位置的数据(更新界面) observableList.remove(0 + 1); // 将可观察列表中的数据按顺序排序(2种缩写形式) (更新界面) observableList.sort(String::compareTo); observableList.sort(Comparator.naturalOrder()); // 将可观察列表中的数据按倒序排序(更新界面) observableList.sort(Comparator.reverseOrder());
监听数据类型(SimpleXXXProperty)
通过listView获取可观察列表,往可观察列表里添加数据(使用这种发送当某条具体数据的内容发生改变时,界面不会刷新)
添加数据到ListView中
ListView<SimpleStringProperty> listView = new ListView<>(); listView.setPrefWidth(300); listView.setPrefHeight(300); listView.setLayoutX(100); listView.setLayoutY(100); SimpleStringProperty dataAProperty = new SimpleStringProperty("data - a"); SimpleStringProperty dataVProperty = new SimpleStringProperty("data - v"); SimpleStringProperty dataSProperty = new SimpleStringProperty("data - s"); SimpleStringProperty dataEProperty = new SimpleStringProperty("data - e"); SimpleStringProperty dataXProperty = new SimpleStringProperty("data - x"); SimpleStringProperty dataNProperty = new SimpleStringProperty("data - n"); // 获得listView创建的默认可观察列表 ObservableList<SimpleStringProperty> observableList = listView.getItems(); observableList.add(dataAProperty); observableList.add(dataVProperty); observableList.add(dataSProperty); observableList.add(dataEProperty); observableList.add(dataXProperty); observableList.add(dataNProperty);
操作observableList或具体某个Property属性
// (更新界面) observableList.add(new SimpleStringProperty("data - o")); // (更新界面) observableList.set(0,new SimpleStringProperty("data - u")); // 使用listView生成的observerList的数据进行数据内容更新时,界面不会更新,但数据被修改了(不更新界面) dataAProperty.set("data - u"); System.out.println("dataAProperty.get() = " + dataAProperty.get()); // 刷新listView,强制更新界面 listView.refresh();
创建可观察列表,传入Callback(使用这种发送当某条具体数据的内容发生改变是,界面中对应数据会被修改)
自定义可观察列表
ObservableList<SimpleStringProperty> list = FXCollections.observableArrayList(new Callback<SimpleStringProperty, Observable[]>() { @Override public Observable[] call(SimpleStringProperty param) { System.out.println("初始化数据"); return new SimpleStringProperty[]{param}; } }); // 使用自定义列表 ListView<SimpleStringProperty> listView = new ListView<>(list);
添加数据到list中
// 使用自定义列表 ListView<SimpleStringProperty> listView = new ListView<>(list); listView.setPrefWidth(300); listView.setPrefHeight(300); listView.setLayoutX(100); listView.setLayoutY(100); SimpleStringProperty dataAProperty = new SimpleStringProperty("data - a"); SimpleStringProperty dataVProperty = new SimpleStringProperty("data - v"); SimpleStringProperty dataSProperty = new SimpleStringProperty("data - s"); SimpleStringProperty dataEProperty = new SimpleStringProperty("data - e"); SimpleStringProperty dataXProperty = new SimpleStringProperty("data - x"); SimpleStringProperty dataNProperty = new SimpleStringProperty("data - n"); // 获得listView中设置的可观察列表,即list ObservableList<SimpleStringProperty> observableList = listView.getItems(); observableList.add(dataAProperty); observableList.add(dataVProperty); observableList.add(dataSProperty); observableList.add(dataEProperty); observableList.add(dataXProperty); observableList.add(dataNProperty);
操作observableList或具体某个Property属性
// (更新界面) observableList.add(new SimpleStringProperty("data - o")); // (更新界面) observableList.set(0,new SimpleStringProperty("data - u")); // (更新界面) dataAProperty.set("data - u"); System.out.println("dataAProperty.get() = " + dataAProperty.get());
普通对象数据类型(JavaBean)
实体类
public class Data { private String name; private int age; public Data(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
添加数据到ListView中
Data data1 = new Data("张三", 19); Data data2 = new Data("李四", 20); Data data3 = new Data("王五", 23); Data data4 = new Data("赵六", 22); Data data5 = new Data("钱七", 21); // 使用自定义列表 ListView<Data> listView = new ListView<>(); listView.setPrefWidth(300); listView.setPrefHeight(300); listView.setLayoutX(100); listView.setLayoutY(100); ObservableList<Data> observableList = listView.getItems(); observableList.add(data1); observableList.add(data2); observableList.add(data3); observableList.add(data4); observableList.add(data5);
操作observableList或某个对象属性
//(更新界面) observableList.add(new Data("reine",20)); //(更新界面) observableList.remove(0); //(更新界面) observableList.set(0, new Data(observableList.get(0).getName(), 100)); //(不更新界面) data1.setName("REINE"); listView.refresh();
属性为Property数据类型的JavaBean数据类型
实体类
public class DataPro { private SimpleStringProperty name = new SimpleStringProperty(); private SimpleIntegerProperty age = new SimpleIntegerProperty(); public DataPro(String name, int age) { this.name.set(name); this.age.set(age); } public String getName() { return name.get(); } public SimpleStringProperty nameProperty() { return name; } public void setName(String name) { this.name.set(name); } public int getAge() { return age.get(); } public SimpleIntegerProperty ageProperty() { return age; } public void setAge(int age) { this.age.set(age); } }
添加数据到ListView中
DataPro data1 = new DataPro("张三", 19); DataPro data2 = new DataPro("李四", 20); DataPro data3 = new DataPro("王五", 23); DataPro data4 = new DataPro("赵六", 22); DataPro data5 = new DataPro("钱七", 21); // 自定义可观察列表 ObservableList<DataPro> list = FXCollections.observableArrayList(new Callback<DataPro, Observable[]>() @Override public Observable[] call(DataPro param) { // 当对象中任意一个属性改变时都会检测到 Observable[] observables = new Observable[2]; observables[0] = param.nameProperty(); observables[1] = param.ageProperty(); return observables; } }); // 使用自定义列表 ListView<DataPro> listView = new ListView<>(list); listView.setPrefWidth(300); listView.setPrefHeight(300); listView.setLayoutX(100); listView.setLayoutY(100); ObservableList<DataPro> observableList = listView.getItems(); observableList.add(data1); observableList.add(data2); observableList.add(data3); observableList.add(data4); observableList.add(data5);
操作observableList或某个对象属性
//(更新界面) observableList.set(0,new DataPro("REINE",20)); //(更新界面) data1.setName("REINE");
属性既有普通数据类型又有Property的JavaBean数据类型
实体类
public class DataNP { private String name; private SimpleIntegerProperty age = new SimpleIntegerProperty(); public DataNP(String name, int age) { this.name = name; this.age.set(age); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age.get(); } public SimpleIntegerProperty ageProperty() { return age; } public void setAge(int age) { this.age.set(age); } }
添加数据到ListView中
DataNP data1 = new DataNP("张三", 19); DataNP data2 = new DataNP("李四", 20); DataNP data3 = new DataNP("王五", 23); DataNP data4 = new DataNP("赵六", 22); DataNP data5 = new DataNP("钱七", 21); ObservableList<DataNP> list = FXCollections.observableArrayList(new Callback<DataNP, Observable[]>() { @Override public Observable[] call(DataNP param) { // 将参数中所有Property属性返回(1个) return new SimpleIntegerProperty[]{param.ageProperty()}; } }); // 使用自定义列表 ListView<DataNP> listView = new ListView<>(list); listView.setPrefWidth(300); listView.setPrefHeight(300); listView.setLayoutX(100); listView.setLayoutY(100); ObservableList<DataNP> observableList = listView.getItems(); observableList.add(data1); observableList.add(data2); observableList.add(data3); observableList.add(data4); observableList.add(data5);
操作observableList或某个对象属性
//(更新界面) observableList.set(0,new DataNP("REINE",20)); // 只修改普通属性界面不会更新(不更新界面) data1.setName("REINE"); // 修改了监视属性会界面更新,会将之前进行修改的普通属性一并更新到界面(更新界面) data1.setAge(30);