JAVA SWING JTABLE表格,点击表头数据可以排序,且第一二行位置固定,不参与排序

对于JAVA SWING 界面开发,使用表格JTABLE开发过程中,一些情况下可能需要在点击表头时对数据进行排序处理。对于简单的排序处理,jtable的setAutoCreateRowSorter方法可满足,但是对于高要求的排序,则满足不了。

比如,第一行和第二行位置固定不变的情况下,对从第三行开始的数据进行排序,则要怎么处理呢?因此,代码中就需要引入TableRowSorter。

        //设置点击表头,数据自动排序
		TableRowSorter<DefaultTableModel> sorter = 
				new TableRowSorter<DefaultTableModel>(model);
		//获得列的数量
		int columnCount = model.getColumnCount(); 
        //每一列都设定同样的排序规则
		for (int i = 0; i < columnCount; i++) {
			//这里可以根据需要修改
			sorter.setComparator(i, new Comparator<Object>() {
				@Override
				public int compare(Object o1, Object o2) {
					return str1.compareTo(str2);
				}
			});
		}
		//设定行排序规则(将上方定义好的排序规则配置进来)
		table.setRowSorter(sorter);

根据以上的代码,可以引入规则更为复杂的排序,需要开发者自定义。

下面比较完整的代码,是点击表头数据可以排序,且第一二行位置固定,不参与排序的功能,代码如下:

import java.awt.BorderLayout;
import java.util.Comparator;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;


public class JtableTest {
	
	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.setTitle("test");
		JPanel panel = new JPanel();
		panel.setLayout(new BorderLayout());
		panel.add(getPanel(), BorderLayout.CENTER);
		frame.add(panel);
		frame.setBounds(300, 100, 700, 500);
		
		frame.setVisible(true);
	}
	
	public static JScrollPane getPanel() {
		JTable table = new JTable();
		DefaultTableModel model = new DefaultTableModel();
		String[] tableHeader = {"文件名称", "文件类型", "文件时间"};
		model.setColumnIdentifiers(tableHeader);
		final String[][] dataArr = {
				{"当前行固定不变1", "", ""},
				{"当前行固定不变2", "", ""},
				{"file3", "LINK", "2024-04-27 14:00:03"},
				{"file4", "DIR", "2024-04-27 14:00:04"},
				{"file5", "LINK", "2024-04-27 14:00:05"},
				{"file6", "DIR", "2024-04-27 14:00:06"}
				};
		for (int i = 0; i < dataArr.length; i++) {
			model.addRow(dataArr[i]);
		}
		
		//设置点击表头,数据自动排序
		TableRowSorter<DefaultTableModel> sorter = 
				new TableRowSorter<DefaultTableModel>(model);
		//获得列的数量
		int columnCount = model.getColumnCount(); 
		for (int i = 0; i < columnCount; i++) {
			//这里可以根据需要修改
			//设置点击每一列表头都能进行排序,且第一第二行固定位置不变
			sorter.setComparator(i, new Comparator<Object>() {
				@Override
				public int compare(Object o1, Object o2) {
					String str1 = o1.toString();
					String str2 = o2.toString();
					if(str1.startsWith("当前行固定不变") || str1.isEmpty()) {
						return 0;
					}else if(str2.startsWith("当前行固定不变") || str2.isEmpty()) {
						return 0;
					}else {
						return str1.compareTo(str2);
					}
				}
			});
		}
		table.setModel(model);
		table.setRowHeight(50);
		//设定行排序规则(将上方定义好的排序规则配置进来)
		table.setRowSorter(sorter);
//		table.setAutoCreateRowSorter(false);
		
		JScrollPane scrollPane = new JScrollPane(table);
		return scrollPane;
	}

}

生成的效果图如下:

点击表头文件名称那一列自动排序时效果图如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/578141.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《html自用使用指南》--基于w3School实践

1.基础标签 文本输入时&#xff0c;在编辑器中的换行&#xff0c;多个空格&#xff0c;都被编辑器看作一个空格 <p> 这个段落 在源代码 中 包含 许多行 但是 浏览器 忽略了 它们。 </p>结果&#xff1a;这个段落 在源代码 中 包含 许多行 但是 浏览器…

惊!文件夹突变文件,揭秘背后原因及数据恢复秘籍

在使用电脑时&#xff0c;我们有时会遇到一些意想不到的问题。比如&#xff0c;你可能会突然发现&#xff0c;原本存储着大量重要资料的文件夹&#xff0c;竟然变成了一个无法打开的文件。这种情况听起来可能有些匪夷所思&#xff0c;但它确实存在&#xff0c;且给用户带来了巨…

微信收款码0.2费率开通

很多人想申请低手续费率的收款码不知从何下手&#xff0c;在参考了大量博客教学之后&#xff0c;终于搞懂了详细流程以及注意事项。在此记录一下。我申请的是一个只需要0.2%费率的微信收款码&#xff0c;申请时间是2022年2月12日。申请之前只需要准备营业执照和法人身份z&#…

用不了ChatGPT?快试试免费又强大的Anthropic Claude

一、Claude 简介 Anthropic 官方&#xff1a; https://www.anthropic.com/product Claude 是最近新开放的一款 AI 聊天机器人&#xff0c;是世界上最大的语言模型之一&#xff0c;比之前的一些模型如 GPT-3 要强大得多&#xff0c;因此 Claude 被认为是 ChatGPT 最有力的竞争…

25计算机考研院校数据分析 | 南京大学

南京大学&#xff08;Nanjing University&#xff09;&#xff0c;简称“南大”&#xff0c;是中华人民共和国教育部直属、中央直管副部级建制的全国重点大学&#xff0c;国家首批“双一流”、“211工程”、“985工程”重点建设高校&#xff0c;入选首批“珠峰计划”、“111计划…

Perfectly Clear Workbench for mac/win:让图像清晰不再是难题

在数字时代&#xff0c;图像处理已经成为我们日常生活和工作中的必备技能。无论是专业摄影师&#xff0c;还是业余爱好者&#xff0c;都渴望拥有一款能够轻松提升图像质量的软件。今天&#xff0c;我要向大家推荐一款卓越的图像清晰处理软件——Perfectly Clear Workbench&…

NAT网络地址转换实验(华为)

思科设备参考&#xff1a;NAT网络地址转换实验&#xff08;思科&#xff09; 一&#xff0c;技术简介 NAT&#xff08;Network Address Translation&#xff09;&#xff0c;即网络地址转换技术&#xff0c;是一种在现代计算机网络中广泛应用的技术&#xff0c;主要用于有效管…

将游戏界面与注册/登录界面连接到一起

一、 导包 在注册页面中导入一个import subprocess包 二、 使用代码将其连接到一起 在循环中加入下面这一行代码&#xff0c;用来实现效果 subprocess.run(["python", "game代码.py"]

容器安全-镜像扫描

前言 容器镜像安全是云原生应用交付安全的重要一环&#xff0c;对上传的容器镜像进行及时安全扫描&#xff0c;并基于扫描结果选择阻断应用部署&#xff0c;可有效降低生产环境漏洞风险。容器安全面临的风险有&#xff1a;镜像风险、镜像仓库风险、编排工具风险&#xff0c;小…

【图解计算机网络】TCP协议三次握手与四次挥手

TCP协议三次握手与四次挥手 三次握手流程为什么是三次握手&#xff0c;而不是两次或四次四次挥手流程TIME_WAIT 为什么要等待 2MSL为什么握手是三次&#xff0c;挥手是四次&#xff1f; 三次握手流程 首先是客户端&#xff08;也就是我们的浏览器&#xff09;发送一个SYN标志位…

在Jupyter notebook中添加虚拟环境

通常我们打开Jupyter notebook&#xff0c;创建一个新文件&#xff0c;只有一个Python3&#xff0c;但是我们也会想使用自己创建的虚拟环境&#xff0c;很简单仅需几部即可将自己的conda环境添加到jupyter notebook中。 1. 创建并激活conda环境&#xff08;已有可跳过&#xf…

Datasophon1.2.1集成Dinky1.0.1

Dinky 下载地址: https://github.com/DataLinkDC/dinky/releases/tag/v1.0.1 Dinky 官网&#xff1a;https://www.dinky.org.cn/ 1.下载Dinky wget https://github.com/DataLinkDC/dinky/releases/download/v1.0.1/dinky-release-1.16-1.0.1.tar.gz mv dinky-release-1.16-1.…

selenium入门篇(环境搭建、八大定位)

背景 Web自动化测现状 1. 属于 E2E 测试 2. 过去通过点点点 3. 好的测试&#xff0c;还需要记录、调试网页的细节 一、selenium环境搭建 一键搭建 pip3 install webdriver-helper 安装后自动的完成&#xff1a; 1. 查看浏览器的版本号 2. 查询操作系统的类型 …

SOLIDWORKS Electrical 3D--精准的三维布线

相信很多工程师在实际生产的时候都会遇到线材长度不准确的问题&#xff0c;从而导致线材浪费甚至整根线材报废的问题&#xff0c;这基本都是由于人工测量长度所导致的&#xff0c;因此本次和大家简单介绍一下SOLIDWORKS Electrical 3D布线的功能&#xff0c;Electrical 3D布线能…

EasyV的可视化作品,没有对这行深入理解,搞不了如此漂亮。

EasyV是我非常佩服的一家可视化服务商&#xff0c;作品涉猎广泛&#xff0c;经典而大气&#xff0c;贝格前端工场的可视化业务与之相比&#xff0c;还是有一定差距&#xff0c;向行业头部企业学习&#xff0c;分享出来一些给大家看下。

海外http代理中的有效连通率是什么意思?

随着互联网的发展&#xff0c;许多人需要使用代理服务器来访问海外网站或绕过地理限制&#xff0c;在选择一个可靠的海外HTTP代理时&#xff0c;了解其有效连通率是至关重要的。 本文将解释有效连通率的含义&#xff0c;并提供详细的测试步骤&#xff0c;帮助您评估一家IP代理…

RabbitMQ工作模式(5) - 主题模式

概念 主题模式&#xff08;Topic Exchange&#xff09;是 RabbitMQ 中一种灵活且强大的消息传递模式&#xff0c;它允许生产者根据消息的特定属性将消息发送到一个交换机&#xff0c;并且消费者可以根据自己的需求来接收感兴趣的消息。主题交换机根据消息的路由键和绑定队列的路…

ARCGIS PRO3 三维模型OSGB转SLPK场景数据集

1.前言 因项目工作&#xff0c;需要将三维模型发布到arcgisserver上&#xff0c;但arcgisserver只支持slpk格式的模型&#xff0c;于是我开启了漫长的三维模型格式转换之旅&#xff0c;在这里记录下本人踩过的坑。 2.三维模型数据情况 2.1 模型大小&#xff1a;在20GB以上&a…

高级IO|从封装epoll服务器到实现reactor服务器|Part2

项目复习&#xff1a;从封装epoll_server到实现reactor服务器(part2) 项目复习&#xff1a;从封装epoll_server到实现reactor服务器(part2) 基本结构搭建好为什么上面我们写的epoll的recv是不正确的&#xff1f;sock要封装了&#xff0c;要维护缓冲区封装epoll(1)继续先写tcp_…

MATLAB 2024a软件下载安装教程

1-首先下载Matlab&#xff0c;以下迅雷云链接&#xff0c;里面有全版本的matlab&#xff0c;根据自己的需要下载即可&#xff0c;建议下载最新版的&#xff0c;功能会更多&#xff0c;当然内存也会更大。 迅雷云盘迅雷云盘https://pan.xunlei.com/s/VNgH_6VFav8Kas-tRfxAb3XOA…