关于javaFX中的TableView

来源:互联网 发布:unity编程 编辑:程序博客网 时间:2024/06/04 20:11

javaFX中的TableView相关知识点笔记

  • VBox.setSpacing(5);

    面板的模块之间间隔为5

  • vbox.setPadding(new Insets(10, 0, 0, 10));

    1.padding在CSS中是用来控制元素内边距的。
    2.padding如果写1个值,则上下左右4个内边距都是此值
    3.padding如果写2个值,则是上下、左右值。
    4.padding如果写4个值,则是上、右、下、左值。
    5.Insets设置节点外围空白大小


  • TableView class表单类,管理整个表单(包括TableColumn class和TableCell class)。列表中无数据时,可用setPlaceholder方法来指定在表中要显示的node(节点),默认显示“No content in table”。

    TableColumn class表单列表类,管理表单中每一列的列名、内容等。
    setVisible()方法,设置列的可见性。
    getColumns().addAll()设置嵌套列嵌套列,Email列下面有两个子列Primary、Secondary
    第一步:定义数据模型 新建一个类,类中数据域对应TableView中的每一列,例子如下:

    private final SimpleStringProperty firstName;    private final SimpleStringProperty lastName;    private final SimpleStringProperty email;

SimpleStringProperty可以使得TableView实时更新。

TableCell setCellValueFactory方法为每个列指定单元格工厂,单元格工厂通过PropertyValueFactory class实现,该类使用表列的属性值(与新建立的保存数据的类类名相同)作为该类(此处以Person类为例)相应方法的引用,例子如下:

firstNameCol.setCellValueFactory(    new PropertyValueFactory<>("firstName"));lastNameCol.setCellValueFactory(    new PropertyValueFactory<>("lastName"));emailCol.setCellValueFactory(    new PropertyValueFactory<>("email"));

第二步:向数据模型中添加数据 FXCollections包装器方法(如synchronizeObservableList或emptyObservableList)与Collections中的方法具有完全相同的功能,除非它们返回ObservableList,因此适用于需要在输入上使用ObservableList的方法。
ObservableList对象允许跟踪对其元素的任何更改,所以每当数据更改时,TableView内容都会自动更新。

final ObservableList<Person> data = FXCollections.observableArrayList(    new Person("Jacob", "Smith", "jacob.smith@example.com"),    new Person("Isabella", "Johnson", "isabella.johnson@example.com"),    new Person("Ethan", "Williams", "ethan.williams@example.com"),    new Person("Emma", "Jones", "emma.jones@example.com"),    new Person("Michael", "Brown", "michael.brown@example.com"));

第三步:将数据与列关联 可以使用TableView类的setItems方法将数据添加到表中

 table.setItems(data); table.getColumns().addAll(firstNameCol, lastNameCol, emailCol);

完整的TableView使用的代码(基础操作)

import javafx.application.Application;import javafx.beans.property.SimpleStringProperty;import javafx.collections.FXCollections;import javafx.collections.ObservableList;import javafx.geometry.Insets;import javafx.scene.Group;import javafx.scene.Scene;import javafx.scene.control.Label;import javafx.scene.control.TableColumn;import javafx.scene.control.TableView;import javafx.scene.control.cell.PropertyValueFactory;import javafx.scene.layout.VBox;import javafx.scene.text.Font;import javafx.stage.Stage;public class TableViewSample extends Application {    private final TableView<Person> table = new TableView<>();    private final ObservableList<Person> data =        FXCollections.observableArrayList(            new Person("Jacob", "Smith", "jacob.smith@example.com"),            new Person("Isabella", "Johnson", "isabella.johnson@example.com"),            new Person("Ethan", "Williams", "ethan.williams@example.com"),            new Person("Emma", "Jones", "emma.jones@example.com"),            new Person("Michael", "Brown", "michael.brown@example.com")        );    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(450);        stage.setHeight(500);        final Label label = new Label("Address Book");        label.setFont(new Font("Arial", 20));        table.setEditable(true);        TableColumn firstNameCol = new TableColumn("First Name");        firstNameCol.setMinWidth(100);        firstNameCol.setCellValueFactory(                new PropertyValueFactory<>("firstName"));        TableColumn lastNameCol = new TableColumn("Last Name");        lastNameCol.setMinWidth(100);        lastNameCol.setCellValueFactory(                new PropertyValueFactory<>("lastName"));        TableColumn emailCol = new TableColumn("Email");        emailCol.setMinWidth(200);        emailCol.setCellValueFactory(                new PropertyValueFactory<>("email"));        table.setItems(data);        table.getColumns().addAll(firstNameCol, lastNameCol, emailCol);        final VBox vbox = new VBox();        vbox.setSpacing(5);        vbox.setPadding(new Insets(10, 0, 0, 10));        vbox.getChildren().addAll(label, table);        ((Group) scene.getRoot()).getChildren().addAll(vbox);        stage.setScene(scene);        stage.show();    }    public static class Person {        private final SimpleStringProperty firstName;        private final SimpleStringProperty lastName;        private final SimpleStringProperty email;        private Person(String fName, String lName, String email) {            this.firstName = new SimpleStringProperty(fName);            this.lastName = new SimpleStringProperty(lName);            this.email = new SimpleStringProperty(email);        }        public String getFirstName() {            return firstName.get();        }        public void setFirstName(String fName) {            firstName.set(fName);        }        public String getLastName() {            return lastName.get();        }        public void setLastName(String fName) {            lastName.set(fName);        }        public String getEmail() {            return email.get();        }        public void setEmail(String fName) {            email.set(fName);        }    }} 

运行结果

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 船舶挂靠船务公司去要怎么办 被螃蟹扎了肿了怎么办 手指被海鲜刺了怎么办 被海鲜刺进去了怎么办 手被海鲜扎了怎么办 环评设备写错了怎么办 物业对高空抛物怎么办 如果法官不公平判案我该怎么办? 民事案夸省审理案件不公平怎么办 积目头像未通过审核怎么办 电压不稳空调带不动怎么办 孩子吃了塑料珠怎么办 美的电压力锅打不开盖子怎么办 瓶盖打不开怎么办 瓶子是玻璃的 杯子口关错位了怎么办 大玻璃瓶的玻璃瓶盖拧不开怎么办 按压式洗发水瓶盖打不开怎么办 向下按压的瓶盖打不开怎么办 玻璃罐头开过了打不开怎么办 玻璃瓶的塑料盖子打不开怎么办 泡酒玻璃瓶盖子打不开怎么办 罐头的塑料瓶盖打不开怎么办 塑料水杯盖紧了怎么办 拧不开矿泉水瓶盖怎么办 新暖壶盖吸住了怎么办 暖瓶盖被吸住了怎么办 做面包和面粘手怎么办 面包面和稀了怎么办 鱼缸氧气泵声音大怎么办 中班安全遇到火灾怎么办反思 汤洒了怎么办活动反思 下水道被塑料盖堵了怎么办 卫生间地漏盖子掉到下水道怎么办 洗手池下水道翻盖打不开了怎么办 培乐多彩泥吃了怎么办 超轻橡皮泥干了怎么办 脑梗脾气大怎么办好啊 牙齿喝饮料烂了怎么办 大门牙缝里黑了怎么办 椰汁拧不开瓶盖怎么办 装蜂蜜的玻璃罐打不开怎么办