注释在代码中:
1、listView数据展示
2、数据编辑后取值StringConverter
3、数据编辑的方式setCellFactory
//listView.setCellFactory(TextFieldListCell.forListView());
//cellfactory操作;自定义单元格
//TextFieldListCell 表示是一个文本编辑框,可以更改为listCell的相关子类,
//例如ComboxListCell 下拉列表等等类似的Cell
//CheckBoxListCell
基本示例代码:
package application.com.listView;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.cell.TextFieldListCell;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import javafx.util.StringConverter;
public class BasicListView extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
// TODO Auto-generated method stub
//可观察的数据
//ObservableList<String> obList = FXCollections.observableArrayList();
//obList.add("list -a ");
//ListView<String> listView = new ListView<String>(obList);
ObservableList<Person> obList = FXCollections.observableArrayList();
Person p = new Person();
p.setNameString("lily");
p.setAgeInteger(12);
obList.add(p);
ListView<Person> listView = new ListView<Person>(obList);
listView.setPrefHeight(200);
listView.setPrefWidth(200);
listView.setFixedCellSize(30.00); // 设置单元格高度,每一行的高度
listView.getSelectionModel().getSelectedItem(); // 获取选择的对象列表
AnchorPane anchorPane = new AnchorPane();
anchorPane.setPrefSize(300.00,300.00);
listView.setPlaceholder(new Label("No data")); // 占位符,无数据时候展示的内容
listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); //可多选,默认single
//编辑列表操作
listView.setEditable(true);//可编辑操作
//listView.setCellFactory(TextFieldListCell.forListView());
//cellfactory操作;自定义单元格
//TextFieldListCell 表示是一个文本编辑框,可以更改为listCell的相关子类,
//例如ComboxListCell 下拉列表等等类似的Cell
//CheckBoxListCell
listView.setCellFactory(TextFieldListCell.forListView(new StringConverter<Person>() {
Person person = null;
//数据输出
@Override
public String toString(Person object) {
// TODO Auto-generated method stub
System.out.println("sssss");
person = object;
return "姓名:"+ object.getNameString() + ",年龄:"+object.getAgeInteger();
}
//数据更新
@Override
public Person fromString(String string) {
System.out.println("dddddd");
// TODO Auto-generated method stub
person.setNameString(string);
return person;
}
}));
anchorPane.getChildren().add(listView);
AnchorPane.setLeftAnchor(listView, 50.00);
AnchorPane.setTopAnchor(listView, 50.00);
Scene scene = new Scene(anchorPane);
primaryStage.setScene(scene);
primaryStage.show();
}
}
class Person {
private String nameString;
private Integer ageInteger;
public String getNameString() {
return nameString;
}
public void setNameString(String nameString) {
this.nameString = nameString;
}
public Integer getAgeInteger() {
return ageInteger;
}
public void setAgeInteger(Integer ageInteger) {
this.ageInteger = ageInteger;
}
}
如果是checkboxlistCell的写法如下
listView.setCellFactory(CheckBoxListCell.forListView(new Callback<Person, ObservableValue<Boolean>>() {
//是否选中,第一个参数
@Override
public ObservableValue<Boolean> call(Person param) {
// TODO Auto-generated method stub
return null;
}
},new StringConverter<Person>() {
//第二个参数数据输入输出转换
Person person = null;
//数据输出
@Override
public String toString(Person object) {
// TODO Auto-generated method stub
System.out.println("sssss");
person = object;
return "姓名:"+ object.getNameString() + ",年龄:"+object.getAgeInteger();
}
//数据更新
@Override
public Person fromString(String string) {
System.out.println("dddddd");
// TODO Auto-generated method stub
person.setNameString(string);
return person;
}
}));
自定义UI:
listView.setCellFactory(new Callback<ListView<Person>, ListCell<Person>>() {
@Override
public ListCell<Person> call(ListView<Person> param) {
//自定义UI
ListCell<Person> listCell = new ListCell<Person>() {
@Override
protected void updateItem(Person item, boolean empty) {
super.updateItem(item, empty);
if(empty) {return ;}
HBox hBox = new HBox(10);
Button btn = new Button(item.getNameString());
hBox.getChildren().add(btn);
btn.setOnAction((e)->{
System.out.println("info about e");
});
this.setGraphic(hBox);
};
};
return listCell;
}
});