如何使用TableView展示表格数据
TableView 可以展示一个行列二维表格。表格由表头和记录组成。
表头由若干 TableColumn 组成。
通过定义 TableView 的代码:
TableView<Student> studentTableView;
可以看出,记录的数据结构就是其模板参数。
我们可以把 Student 的 getXxx 方法映射到一个表格中,从而完成记录的创建。
效果展示
示例代码
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class TableViewExample extends Application
{
public static class Student
{
private String name;
private int age;
public Student(String name, int age)
{
this.name = name;
this.age = age;
}
public String getName() { return name; }
public int getAge() { return age; }
}
private TableView<Student> studentTableView;
private void onSelectItem(Student item)
{
System.out.println(String.format("name: %s, age: %d", item.getName(), item.getAge()));
}
private void buildStudentTableView()
{
studentTableView = new TableView<>();
studentTableView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> onSelectItem(newValue) );
TableColumn<Student, String> nameColumn = new TableColumn<>("Name");
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
TableColumn<Student, String> ageColumn = new TableColumn<>("Age");
ageColumn.setCellValueFactory(new PropertyValueFactory<>("age"));
studentTableView.getColumns().add(nameColumn);
studentTableView.getColumns().add(ageColumn);
studentTableView.getItems().add(new Student("Tom", 21));
studentTableView.getItems().add(new Student("Jim", 23));
studentTableView.getItems().add(new Student("Micle", 18));
}
@Override
public void start(Stage window) throws Exception
{
VBox vBox = new VBox();
this.buildStudentTableView();
vBox.getChildren().add(studentTableView);
Scene scene = new Scene(vBox, 400, 300);
window.setScene(scene);
window.setTitle(this.getClass().getSimpleName());
window.show();
}
public static void main(String[] args)
{
launch(args);
}
}
代码说明
- 这段代码由三部分组成:
- 定义了一个结构 Student ,其每个实例对应 TableView 的一个记录,每个字段对应 TableView 的表头列
buildStudentTableView
用于创建 TableView ,并填充其内容start
函数创建了场景图,然后把创建好的 TableView 添加进去从而显示
studentTableView.getSelectionModel().selectedItemProperty().addListener
添加了用户选择记录时的监听事件new TableColumn<>
用于创建表头列,setCellValueFactory
方法用于绑定 Student 的 getXxx 方法,从而在添加记录时设置对应的内容studentTableView.getColumns().add
添加一个表头列studentTableView.getItems().add
添加一个记录
总结
使用 TableView 展示表格数据的步骤如下:
- 定义数据结构:创建一个与 TableView 记录对应的数据结构,每个字段对应一个表头列。在示例中,使用了 Student 类作为记录的数据结构,它有 name 和 age 两个字段
- 创建TableView实例
- 创建表头列:使用 TableColumn 类创建表头列,并使用 setCellValueFactory 方法将数据结构中的字段与表头列进行绑定。在示例中,创建了两个表头列( Name 和 Age ),并将它们与 Student 类的 name 和 age 字段进行绑定
- 填充表格内容:使用 getItems 方法获取 TableView 的数据项列表,并使用 add 方法添加记录
- 设置事件监听:如果需要对用户选择记录进行响应,可以使用 selectionModel 的 selectedItemProperty 方法添加监听器来监听用户选择的记录