服务器测评网
我们一直在努力

javafx怎么创建表格

JavaFX表格创建基础

在JavaFX中,表格(TableView)是展示结构化数据的核心组件,广泛应用于数据管理、报表生成等场景,创建一个功能完善的表格需要理解其核心组件、数据绑定及交互逻辑,本文将详细介绍JavaFX表格的创建步骤,从基础布局到高级功能实现。

javafx怎么创建表格

表格核心组件概述

JavaFX表格主要由三个核心类构成:TableViewTableColumnTableCell

  • TableView:表格容器,负责整体布局和数据显示。
  • TableColumn:表格列,定义列的标题、数据绑定及单元格渲染方式。
  • TableCell:单元格,负责具体数据的展示和编辑。

理解这三者的关系是创建表格的基础:TableView包含多个TableColumn,每个TableColumn由多个TableCell组成。

创建基础表格

初始化TableView

创建TableView实例并添加到容器中(如BorderPaneVBox)。

TableView<Person> tableView = new TableView<>();  
BorderPane root = new BorderPane();  
root.setCenter(tableView);  
Scene scene = new Scene(root, 600, 400);  
Stage stage = new Stage();  
stage.setScene(scene);  
stage.show();  

定义数据模型

表格需要绑定数据模型,通常使用JavaBean类,定义Person类:

public class Person {  
    private String name;  
    private int age;  
    private String email;  
    // 构造方法、getter和setter省略  
}  

创建TableColumn

为每个数据属性创建对应的列,并设置列标题:

TableColumn<Person, String> nameColumn = new TableColumn<>("姓名");  
TableColumn<Person, Integer> ageColumn = new TableColumn<>("年龄");  
TableColumn<Person, String> emailColumn = new TableColumn<>("邮箱");  
tableView.getColumns().addAll(nameColumn, ageColumn, emailColumn);  

绑定数据到列

通过setCellValueFactory方法将列与数据模型的属性绑定:

javafx怎么创建表格

nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));  
ageColumn.setCellValueFactory(new PropertyValueFactory<>("age"));  
emailColumn.setCellValueFactory(new PropertyValueFactory<>("email"));  

填充数据

使用ObservableList作为数据源,以便支持动态更新:

ObservableList<Person> data = FXCollections.observableArrayList(  
    new Person("张三", 25, "zhangsan@example.com"),  
    new Person("李四", 30, "lisi@example.com")  
);  
tableView.setItems(data);  

完成以上步骤后,一个基础表格即可显示。

自定义单元格渲染

默认情况下,TableCell以文本形式显示数据,若需自定义显示(如年龄列显示为红色),可通过cellFactory实现:

ageColumn.setCellFactory(column -> {  
    TableCell<Person, Integer> cell = new TableCell<>() {  
        @Override  
        protected void updateItem(Integer item, boolean empty) {  
            super.updateItem(item, empty);  
            if (empty || item == null) {  
                setText(null);  
                setStyle("");  
            } else {  
                setText(item.toString());  
                setStyle(item > 28 ? "-fx-text-fill: red;" : "");  
            }  
        }  
    };  
    return cell;  
});  

添加行选择与编辑功能

行选择事件

监听表格的选中行变化:

tableView.getSelectionModel().selectedItemProperty().addListener((obs, oldSelection, newSelection) -> {  
    if (newSelection != null) {  
        System.out.println("选中: " + newSelection.getName());  
    }  
});  

启用单元格编辑

设置列可编辑,并处理编辑事件:

emailColumn.setEditable(true);  
emailColumn.setCellFactory(TextFieldTableCell.forTableColumn());  
emailColumn.setOnEditCommit(event -> {  
    Person person = event.getRowValue();  
    person.setEmail(event.getNewValue());  
});  

排序与过滤功能

列排序

默认情况下,列可点击排序,若需自定义排序逻辑(如按年龄降序):

javafx怎么创建表格

ageColumn.setComparator(Comparator.reverseOrder());  

数据过滤

使用FilteredListSortedList实现动态过滤:

FilteredList<Person> filteredData = new FilterList<>(data);  
filteredData.setPredicate(person -> person.getAge() > 25);  
SortedList<Person> sortedData = new SortedList<>(filteredData);  
sortedData.comparatorProperty().bind(tableView.comparatorProperty());  
tableView.setItems(sortedData);  

高级功能扩展

多行表头

通过嵌套TableColumn实现多级表头:

TableColumn<Person, String> nameColumn = new TableColumn<>("个人信息");  
TableColumn<Person, String> firstNameColumn = new TableColumn<>("姓名");  
nameColumn.getColumns().addAll(firstNameColumn);  

固定列

冻结特定列以便滚动时始终可见:

emailColumn.setResizable(false);  
emailColumn.setPrefWidth(150);  
tableView.getColumns().setAll(0, emailColumn); // 0表示固定在左侧  

自定义行高

通过CSS或setRowFactory调整行高:

tableView.setRowFactory(tv -> {  
    TableRow<Person> row = new TableRow<>() {  
        @Override  
        protected void updateItem(Person item, boolean empty) {  
            super.updateItem(item, empty);  
            setPrefHeight(empty ? 25 : 40); // 自定义行高  
        }  
    };  
    return row;  
});  

JavaFX表格的创建涉及数据模型、列绑定、单元格渲染及交互功能等多个环节,通过合理组合TableViewTableColumnTableCell,并结合ObservableList的动态特性,可以构建功能丰富的数据展示界面,从基础布局到高级定制,掌握这些技术后,开发者能够灵活应对各种复杂数据展示需求,为用户提供流畅的操作体验。

赞(0)
未经允许不得转载:好主机测评网 » javafx怎么创建表格