JAVAFX的TableView基本用法

article/2025/8/26 14:48:26

JAVAFX中的表格显示主要使用TableView

与TableView相关的类:

TableColumn
TableRow
TableCell
TablePosition
TableViewFocusModel
TableViewSelectionModel

JavaFX TableView例子:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;/*** TableView示例** @author Raygo* @since 2022年3月2日*/
public class TableViewExample extends Application {/*** 启动** @param args 参数*/public static void main(String[] args) {launch(args);}@Overridepublic void start(Stage primaryStage) {// 创建一个表格视图TableView<Person> tableView = new TableView<>();// 创建列TableColumn<Person, String> column1 = new TableColumn<>("姓名");column1.setCellValueFactory(new PropertyValueFactory<>("Name"));TableColumn<Person, String> column2 = new TableColumn<>("年龄");column2.setCellValueFactory(new PropertyValueFactory<>("age"));// 设置列宽column1.setPrefWidth(120.0d);column2.setPrefWidth(200.0d);// 添加列tableView.getColumns().add(column1);tableView.getColumns().add(column2);// tableView.getColumns().addAll(column1, column2);// 无行数据显示时的占位符tableView.setPlaceholder(new Label("空白"));Button addLine = new Button("添加行");addLine.setOnMouseClicked((event) -> {// 添加行数据tableView.getItems().add(new Person("张三", 15));tableView.getItems().add(new Person("李四", 22));});Button singleSelect = new Button("单选模式");singleSelect.setOnMouseClicked((event) -> {// 设置选择模式为单行tableView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);});Button multiSelect = new Button("多选模式");multiSelect.setOnMouseClicked((event) -> {// 设置多行选择模式tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);});// 界面HBox topBar = new HBox();topBar.getChildren().addAll(addLine, singleSelect, multiSelect);VBox body = new VBox(tableView);VBox vbox = new VBox();vbox.getChildren().addAll(topBar, body);Scene scene = new Scene(vbox);primaryStage.setScene(scene);primaryStage.setWidth(480.0d);primaryStage.setHeight(320.0d);primaryStage.show();}public class Person {private String name;private int age;public Person(String name, int age) {this.setName(name);this.setAge(age);}/*** Get age value** @return the age*/public int getAge() {return age;}/*** Set age to age** @param age the age to set*/public void setAge(int age) {this.age = age;}/*** Get name value** @return the name*/public String getName() {return name;}/*** Set name to name** @param name the name to set*/public void setName(String name) {this.name = name;}}
}

 单元格值工厂
TableColumn必须设置单元格值工厂,提取要显示在列中的每个单元格(每行)中的值。在上面的例子中使用了PropertyValueFactory。PropertyValueFactory工厂可以从Java对象中提取一个属性值(字段值)。属性名作为参数传递给PropertyValueFactory构造函数,如下所示:
 

PropertyValueFactory factory = new PropertyValueFactory<>("firstName");

属性名firstName将与Person对象的getter getter方法getFirstName()相匹配,Person对象包含每行显示的值。

占位符

当JavaFX TableView没有显示行时,可以设置一个占位符来显示。占位符必须是JavaFX Node类的一个实例,大多数(如果不是全部)JavaFX控件都是这样的。因此,您可以使用JavaFX ImageView或JavaFX Label作为占位符,例如:
 

tableView.setPlaceholder(new Label("空白"));

下面是相应的TableView在显示占位符后的样子:

设置表格行的选择模式

你可以使用setSelectionMode()方法来设置TableView TableViewSelectionModel的选择模式:

// 设置选择模式为单行
tableView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);// 设置多行选择模式
tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

 获取选中的表格行

// 获取选中的多行数据
ObservableList<Person> selectedItems = tableView.getSelectionModel().getSelectedItems();// 监听选中行的变化
selectedItems.addListener(new ListChangeListener<Person>() {@Overridepublic void onChanged(Change<? extends Person> change) {System.out.println("Selection changed: " + change.getList());}
});

列的排序

// 使能排序
column0.setSortable(true);
// 禁用排序
column0.setSortable(false);
// 排序类型设置为升序
column0.setSortType(TableColumn.SortType.ASCENDING);
// 排序类型设置为降序
column0.setSortType(TableColumn.SortType.DESCENDING);

序号列

TableColumn<Person, String> column0 = new TableColumn<>("序号");
column0.setCellFactory((tableColumn) -> {TableCell<Person, String> tableCell = new TableCell<>() {@Overrideprotected void updateItem(String item, boolean empty) {super.updateItem(item, empty);this.setText(null);this.setGraphic(null);if (!empty) {this.setText(String.valueOf(this.getIndex() + 1));}}};return tableCell;
});

添加列

tableView.getColumns().add(0, column0);

http://chatgpt.dhexx.cn/article/GOxwsrPm.shtml

相关文章

QT之Tableview

想要了解更多的tableview可以看这位博客Qt深入浅出&#xff08;十五&#xff09;QTableView​ 这里做了一个简单的学生系统查询功能显示Tableview&#xff1a; 表格视图控件QTableView&#xff0c;需要和QStandardItemModel, 配套使用&#xff0c;这套框架是基于MVC设计模式设…

QML TableView 使用详解

目录 一、—个简单的TableView实例 二、TableViewColumn 属性讲解 三、定制表格外观 3.1 itemDelegate3.2 rowDelegate3.3 headerDelegate3.4 定制表格外观后的示例 四、动态增删改查 TabelView TableView 就是 Qt Quick 为表格式呈现数据提供的组件。想必兄台用过 Excel…

QT控件之(TableView)的居中效果

T将tableView中的表头以及文本内容都进行居中处理 1、需要在构造函数中增加一句&#xff1a; //以下增加的是表头的效果 ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//布局排版是全部伸展开的效果2、就是直接对tableView的文本内…

QML学习十七:TableView的简单使用

若该文为原创文章&#xff0c;转载请注明原文出处 一、TableView TableView是Qt Quick为表格式呈现数据提供的组件。 TableView与ListView类似&#xff0c;相比之下多了滚动条、挑选、可调整尺寸的表头等特性&#xff0c;数据也是通过Model来提供&#xff0c;此篇使用的是内建…

JavaFX中TableView的使用

稍微说说JavaFX里面TableView怎么用&#xff0c;&#xff08;其实在JavaFX的源码中都有示例。。。&#xff09; 首先要了解TableView是用来做什么的&#xff0c;TableView是JavaFX的一个表视图&#xff0c;用来显示表格的&#xff0c;在TableView的类注释中写了 /*** see Tab…

Qt4实现TableView显示表格数据

最近又开始搞QT开发了&#xff0c;前面学的MVC啥的都忘得差不多了&#xff0c;重新整理一遍思路吧。 目前的需求是&#xff1a;读取文本文件&#xff0c;表格型数据&#xff0c;用tableview显示出来&#xff0c;最后画图。这涉及到三个问题&#xff0c;文件读写&#xff0c;数…

NAT模式下的虚拟机网络配置

原理 NAT模式&#xff0c;也叫地址转换模式&#xff0c; 当把我们的虚拟机的上网方式设置为NAT模式时&#xff0c;虚拟机、宿主机、各网卡之间的连接关系可用下图来表示&#xff1a; 具体配置流程 1 将本地以太网共享到v8适配器上 2 查看虚拟网络编辑中的NAT模式下的子网IP…

虚拟机vmware设置nat模式上网

桥接模式上网&#xff1a;虚拟机vmware设置桥接模式上网_cao849861802的博客-CSDN博客 首先虚拟机有两个虚拟网卡vmnet0和vmnet8 这个vmnet0默认的是桥接模式&#xff0c;这个vmnet8默认是nat模式&#xff1b; 我们这里只看nat模式&#xff0c;所以先不关心vmnet0虚拟网卡&a…

VMware16NAT模式配置固定IP

文章目录 前言一、NAT配置固定IP二、重启网卡结尾 前言 为什么要配置固定IP呀&#xff1f;这个很容易解释啊&#xff0c;因为配置集群要设置固定IP&#xff08;主结点需要管理子结点&#xff0c;通过固定IP识别机器&#xff09;&#xff0c;因为你访问虚拟机方便&#xff08;不…

VMware Workstation中桥接模式、NAT模式、仅主机模式

一、VMware虚拟机的网络模式 VMware工作站虚拟机有三种网络模式【①桥接模式 ②NAT模式 ③仅主机模式】,如下图所示: 二、VMware虚拟机的网络模式介绍 2.0、VMware的虚拟设备 VMware的虚拟设备 序号虚拟设备编号说明1VMnet0是虚拟桥接网络下的虚拟交换机2VMnet1是虚拟Host-…

vm虚拟机nat模式配置

痛点&#xff1a; 为了解决虚拟机与板子网络的调试的问题&#xff0c;我之前一直用桥接&#xff0c;如果虚拟机想上网就桥接到无线网卡&#xff0c;如果想连接板子&#xff0c;就桥接到有线网卡&#xff0c;麻烦&#xff0c;需要来回切换&#xff0c;还有就是不插板子的情况下和…

nat模式

原文链接&#xff1a;https://www.linuxidc.com/Linux/2016-09/135521p2.htm &#xff08;复制过来只是为了学习方便&#xff0c;如有不妥会立即删除&#xff09; 二、NAT&#xff08;地址转换模式&#xff09; 刚刚我们说到&#xff0c;如果你的网络ip资源紧缺&#xff0c;但…

虚拟机NAT模式无法联网

工作中遇到NAT模式虚拟机&#xff0c;修改了编辑-虚拟网络编辑器 中NAT设置IP&#xff0c;DNS&#xff0c;DHCP等配置&#xff0c;在centos8中修改了ens33文件都无法联网的情况&#xff0c;特此总结解决方案 按照该方法尝试后无效&#xff08;解决方法在下面&#xff09; 第一…

桥接模式NAT模式 详解

NAT模式 和 桥接模式 网络地址转换 NAT &#xff1a; 首先看一下NAT的概念&#xff1a;装有NAT软件的路由器叫做NAT路由器&#xff0c;它至少有一个有效的外部全球IP地址&#xff0c;这样所有使用本地地址&#xff08;内部专用地址&#xff09;的主机在和外界通信时&#xff…

虚拟机NAT模式无法上网

虚拟机NAT模式无法上网 一、确认虚拟机的ip地址二、确认服务是否开启 一、确认虚拟机的ip地址 确认虚拟机的ip地址与本机的vmnet8的ip地址是否在同一个网段&#xff0c;且网关是否一致&#xff1a; cd /etc/sysconfig/network-scripts/ ls vi ifcfg-ens33如果ip配置都没有问…

【VMware】NAT模式、桥接模式、仅主机模式

VMware的NAT模式、桥接模式、仅主机模式 转载自&#xff1a;https://wxler.github.io/2021/02/02/221724/ 1. NAT模式 拓扑图&#xff1a; 在NAT网络中&#xff0c;会用到VMware Network AdepterVMnet8虚拟网卡。 VMware Network AdepterVMnet8是主机上的一块虚拟网卡&…

虚拟机NAT模式集群改为桥接模式集群

有时候&#xff0c;A 电脑要访问 B 电脑上安装的虚拟机&#xff0c;尴尬的是之前虚拟机配置的网络连接模式为 NAT 模式。 那怎么才能让 A 电脑正常地访问 B 电脑上的虚拟机呢&#xff1f;就需要将虚拟机的网络连接模式由 NAT 模式修改为 桥接模式 。 需要下面简单的几步就可以…

LVS NAT模式配置实践

1. LVS单网卡配置 注&#xff1a;实际应用中LVS使用双网卡&#xff0c;这里仅做演示用。架构图如下&#xff1a; 单网卡LVS 1.1 机器信息 LVS LVS&#xff1a;eth0 10.10.1.100&#xff08;VIP&#xff09; Real Server RS1&#xff1a;eth0 10.10.1.1RS2&#xff1a;eth…

虚拟机网络模式-NAT模式配置

1、打开VMware&#xff0c;点击编辑——》虚拟网络编辑器 2、配置NAT子网。 注意&#xff1a;不能配置和物理主机为同一网段的IP段 点击NAT设置。设置虚拟子网的网关 注意&#xff1a;正常是使用.1做为网关&#xff0c;如果出现网络不行&#xff0c;可以改成.2做网关 4、点击…

Linux下配置nat模式

&#xff08;一&#xff09;打开网络虚拟编辑器 点击更改设置&#xff0c;我们安装好VMware后&#xff0c;在网络连接处会出现两张虚拟网卡&#xff0c;分别是vmnet1和vmnet8&#xff0c;net模式需要配置vmnet8网卡。 接下来通过命令进入 cd /etc/sysconfig/network-scripts&am…