JavaFx 用户界面控件3——TableView

1.表格视图 TableView

ableView是JavaFX提供的一个强大的控件,可以用于显示表格数据。它通过为TableView设定items属性(存储行数据的ObservableList对象)和列属性(TableColumn对象)来完成数据填充与展示。

以下是一个简单的TableView的使用示例:

public class TableViewExample extends Application {

    //创建表格
    private TableView<Person> table = new TableView<Person>();
    private ObservableList<Person> data =
            FXCollections.observableArrayList(
                    new Person("John", "Doe"),
                    new Person("Jane", "Deer"));

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) {
        //构建场景
        Scene scene = new Scene(new Group());
        stage.setTitle("Table View Sample");
        stage.setWidth(300);
        stage.setHeight(500);

        //创建列
        TableColumn firstNameCol = new TableColumn("First Name");
        firstNameCol.setMinWidth(100);
        firstNameCol.setCellValueFactory(
                new PropertyValueFactory<Person, String>("firstName"));

        TableColumn lastNameCol = new TableColumn("Last Name");
        lastNameCol.setMinWidth(100);
        lastNameCol.setCellValueFactory(
                new PropertyValueFactory<Person, String>("lastName"));

        //表格加入列
        table.setItems(data);
        table.getColumns().addAll(firstNameCol, lastNameCol);

        ((Group) scene.getRoot()).getChildren().addAll(table);
        stage.setScene(scene);
        stage.show();
    }

    //对象
    public static class Person {

        private final String firstName;
        private final String lastName;

        private Person(String fName, String lName) {
            this.firstName = fName;
            this.lastName = lName;
        }

        public String getFirstName() {
            return firstName;
        }

        public String getLastName() {
            return lastName;
        }

    }
}

 1.1 TableView 选中事件

public class TableSelectApp extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        //创建表格
        TableView<Item> tblItems = new TableView<>();
        tblItems.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

        VBox.setVgrow(tblItems, Priority.ALWAYS );

        //创建列
        TableColumn<Item, String> colSKU = new TableColumn<>("SKU");
        TableColumn<Item, String> colDescr = new TableColumn<>("Item");
        TableColumn<Item, Float> colPrice = new TableColumn<>("Price");
        TableColumn<Item, Boolean> colTaxable = new TableColumn<>("Tax");

        //列对应实体属性
        colSKU.setCellValueFactory( new PropertyValueFactory<>("sku") );
        colDescr.setCellValueFactory( new PropertyValueFactory<>("descr") );
        colPrice.setCellValueFactory( new PropertyValueFactory<>("price") );
        colTaxable.setCellValueFactory( new PropertyValueFactory<>("taxable") );

        //表格加入列
        tblItems.getColumns().addAll(
                colSKU, colDescr, colPrice, colTaxable
        );

        //添加数据
        tblItems.getItems().addAll(
                new Item("KBD-0455892", "Mechanical Keyboard", 100.0f, true),
                new Item( "145256", "Product Docs", 0.0f, false ),
                new Item( "OR-198975", "O-Ring (100)", 10.0f, true)
        );
        //创建按钮
        Button btnInventory = new Button("Inventory");
        Button btnCalcTax = new Button("Tax");

        //按钮是否可用属性绑定表格选中的数据对应的descr属性
        btnInventory.disableProperty().bind(
                tblItems.getSelectionModel().selectedItemProperty().isNull()
        );

        //按钮是否可用属性绑定表格选中的数据对应的taxable属性
        btnCalcTax.disableProperty().bind(
                tblItems.getSelectionModel().selectedItemProperty().isNull().or(
                        Bindings.select(
                                tblItems.getSelectionModel().selectedItemProperty(),
                                "taxable"
                        ).isEqualTo(false)
                )
        );

        //构建场景
        HBox buttonHBox = new HBox( btnInventory, btnCalcTax );
        buttonHBox.setSpacing( 8 );

        VBox vbox = new VBox( tblItems, buttonHBox );
        vbox.setPadding( new Insets(10) );
        vbox.setSpacing( 10 );

        Scene scene = new Scene(vbox);

        primaryStage.setTitle("TableSelectApp");
        primaryStage.setScene( scene );
        primaryStage.setHeight( 376 );
        primaryStage.setWidth( 667 );
        primaryStage.show();
    }

    public static void main(String[] args) {

        launch(args);
    }

    public class Item {

        private final String sku;
        private final String descr;
        private final Float price;
        private final Boolean taxable;

        public Item(String sku, String descr, Float price, Boolean taxable) {
            this.sku = sku;
            this.descr = descr;
            this.price = price;
            this.taxable = taxable;
        }

        public String getSku() {
            return sku;
        }

        public String getDescr() {
            return descr;
        }

        public Float getPrice() {
            return price;
        }

        public Boolean getTaxable() {
            return taxable;
        }
    }

}

演示应用程序是一个TableView和一对按钮。有TableView四个表列:SKU、商品、价格、税费。该TableView图显示三行中的三个对象:机械键盘、产品文档、O 形圈。以下屏幕截图显示了应用程序启动后立即出现的情况。按钮Inventory绑定了Item属性,Tax按钮绑定了Tax属性

 

点击第一行,两个按钮都被激活

 若此文档不够详细,​可以参考十分钟教你JAVAFX基础入门_哔哩哔哩_bilibili​

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
JavaFXTableView 控件是一个用于展示表格数据的高级控件。它提供了灵活的列和行布局,支持对表格数据进行排序、筛选、编辑和选择等操作。 TableView 的主要特点和功能包括: 1. 列(Columns):TableView 可以包含多个列,每个列由 TableColumn 对象表示。你可以添加、移除和重新排序列,设置列的宽度、标题、对齐方式等属性。 2. 行(Rows):TableView 的每一行表示表格中的一条数据记录。可以通过添加到 TableView 的数据集合(ObservableList)来动态添加和删除行。 3. 单元格(Cells):每个单元格用于显示一个数据项。你可以自定义单元格的样式,包括字体、颜色、背景等。同时,TableView 也支持对单元格进行编辑。 4. 数据源(Items):TableView 使用一个 ObservableList 作为数据源,它可以是任何实现了 javafx.collections.ObservableList 接口的类。 5. 排序和筛选:TableView 支持对表格数据进行排序和筛选。你可以通过设置 TableColumn 的 sortable 属性来启用或禁用某列的排序功能。 6. 编辑(Editing):TableView 可以设置为可编辑模式,允许用户直接在表格中修改数据。你可以通过设置 TableColumn 的 editable 属性来控制某列是否可编辑。 7. 选择(Selection):可以通过 TableView 的 SelectionModel 获取用户选择的行或单元格信息。支持单选和多选模式。 8. 自定义单元格显示:你可以通过 setCellFactory 方法来自定义单元格的显示方式,实现更复杂的表格布局和样式。 使用 TableView 控件,你可以将表格数据以更直观、灵活和可交互的方式展示给用户,满足各种数据展示和操作的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

古智云开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值