FXML与SceneBuilder开发中TableView控件的使用

本人最近正在使用javaFX开发桌面应用程序,使用FXML与SceneBuilder进行界面开发,在经过多方查找后,终于明白了TableView绑定数据的方法!


1、添加TableView控件

(1)在 SceneBuilder 中为 fxml 文件添加一个 TableView 控件。
(2)为该控件添加一个 fx:id 。
(3)在后台控制类中,添加一个变量。注:该变量需要一个泛型(表格数据的实体类)。

@FXML
private TableView table;


2、添加TableColumn控件

(1)TableColumn 是 TableView 的“列”,需要添加在 TableView 控件当中。
(2)为该 TableColumn 控件添加一个 fx:id.
(3)在后台控制类中,添加一个变量。注:该变量需要两个泛型。


@FXML
private TableColumn column;

3、初始化表格数据

(1)TableView 需要一个 ObservableList 集合作为数据,该集合的泛型与 TableView 的泛型需要一致。
(2)配置 TableView 的所有 TableColumn 列。
(3)将数据集合添加到 TableView 中。
(4)实体类:实体类中的变量不能直接使用包装类,而需要javaFX提供的property类,具体如下:
  注:在配置 TableColumn 的时候,除了 String 类型外,其他类型(Integer,Double...)等需要添加 .asObject() 方法,具体如下:

例子:添加一个泛型为Person类的TableView

@FXML
private Table table;
@FXML
private TableColumn ageCol;
@FXML
private TableColumn nameCol;
		
//(1)创建并初始化数据
private final ObservableList cellData = FXCollections.observableArrayList();
cellData.add(new Person(20,"Jack"));
cellData.add(new Person(18,"Jerry"));
cellData.add(new Person(21,"Mike"));

//(2)配置 TableColumn 列
ageCol.setCellValueFactory(cellData -> cellData.getValue().getAge().asObject());
nameCol.setCellValueFactory(cellData -> cellData.getValue().getName());

//(3)为 TableView 添加数据
table.setItems(cellData);
	
//(4)Person 实体类
public class Person {
	private IntegerProperty age;
	private StringProperty name;
			
	public Person(Integer age, String name) {
		super();
		this.age = new SimpleIntegerProperty(age);
		this.name = new SimpleStringProperty(name);
	}
			
	public IntegerProperty getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = new SimpleIntegerProperty(age);
	}
	public StringProperty getName() {
		return name;
	}
	public void setName(String name) {
		this.name = new SimpleStringProperty(name);
	}
}







你可能感兴趣的:(JavaFx技术)