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

news2024/11/18 7:32:37

对于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;
	}

}

生成的效果图如下:

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【leetcode】数组和相关题目总结

1. 两数之和 直接利用hashmap存储值和对于索引&#xff0c;利用target-nums[i]去哈希表里找对应数值。返回下标。 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> mp;vector<int> res;fo…

base64练习

找到password 搜索台搜索password 找到关于password关于base64算法的代码打上断点 点到这个位置在会有一个地址弹出来点击进去 缩小复制 粘贴 运行出数据&#xff0c;成功完成分析

Linux---为什么会有粘滞位?

在前面已经讲过目录的rwx权限&#xff1a; 可读权限(r): 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容. 有可写权限(w):如果目录没有可写权限&#xff0c;则无法在目录中创建文件, 也无法在目录中删除文件.可执行权限(x): 如果目录没有可执行权限, 则无法cd到…

新版运营级限速网盘系统源码 带教程

支持用户使用微信扫码登录&#xff0c;上传文件分享链接可自定义&#xff0c;文件可一键保存到我的网盘&#xff0c;支持微信跟支付宝官方接口&#xff0c;易支付接口不强制可自定义&#xff0c;系统整体的架构安全度升级。学习地址

GraspNet-1Billion 论文阅读

文章目录 GraspNet-1Billion总体数据集评价指标网络pointnet&#xff1a;Approach Network:Operation Network&#xff1a;Tolerance Network 摘要相关工作基于深度学习的抓取预测算法抓取数据集点云深度学习 GraspNet-1Billion CVPR2020 上海交大 论文和数据集地址&#xff1…

Python爬虫--Scrapy框架安装

Scrapy框架安装 &#xff0c; Scrapy 是 Python 领域专业的爬虫开发框架&#xff0c;已经完成爬虫程序的大部分通用工具 它使用了 Twisted 异步网络库来处理网络通讯。整体架构大致如下 第一步&#xff1a;挂小灰机或者将要安装的文件下载到本地 Scrapy 框架安装踩坑中 为什…

【delphi 】常用资源网站

在Delphi的日常开发中&#xff0c;经常会用到第三方资源&#xff0c;本文收集的是开源的资源&#xff0c;建议收藏&#xff0c;以备不时之需&#xff01; 目录 一、通用资源 1. JCL 2. JVCL 3. Alcinoe (mirror at GH) 4. Fundamentals Code Library 5. Spring4D 6. The…

IDEA实现Springboot项目自动热部署

每当我们在修改代码时&#xff0c;往往需要重新启动项目&#xff0c;这样不仅浪费时间而且很麻烦&#xff0c;我们可以通过IDEA的热部署来提高效率 1、首先点file >> settings >> Build Excution >> Compire&#xff0c;选择Build project auto matically 2.…

获取1年免费的SSL证书

之所以写这篇帖子是因为一直使用的阿里云和腾讯云免费的ssl证书由一年有效期相继改为了3个月&#xff0c;3个月换一次证书想太过麻烦了&#xff0c;还是需要一年有效期的证书更为适合 有两个站点推荐:(本次以FreeSSL为例) .JoySSL一个提供免费HTTPS证书申请的网站 FreeSSL.c…

25.Feign的最佳用法

将feignClient抽取为独立模块&#xff0c;并把接口有关的entity,默认feign的配置都放到这个模块中&#xff0c;提供给所有的消费者。 1.首先创建一个module,命名为feign-client,然后引入feigh的starter依赖。 2.将order-service中编写的UserCllient、User都移动到feign-clien…

【STM32+HAL】读取电池电量

一、准备工作 有关CUBEMX的初始化配置&#xff0c;参见我的另一篇blog&#xff1a;【STM32HAL】CUBEMX初始化配置 有关定时器触发ADC模式配置&#xff0c;详见【STM32HAL】ADC采集波形实现 有关软件触发ADC模式配置&#xff0c;详见【STM32HAL】三轴按键PS2摇杆 二、所用工具…

C++高级特性:C/C++内存结构模型(十一)

1、内存结构 C/C语言一只被认为是一种底层语言&#xff0c;与其他语言不一样&#xff0c;对内存结构理解是C/C程序员从入门到入土的开端。 其他编程语言对内存管理是透明的&#xff0c;程序员无序关心可以认为是一个黑盒&#xff1b;而C/C不一样理解好内存结构有利于编写健壮性…

day-26 查询网格图中每一列的宽度

思路&#xff1a; 利用两个for循环&#xff0c;外层for用于遍历列数&#xff0c;内层for用于计算每一列的宽度 解题方法&#xff1a; 内层for循环时&#xff1a; 1.当前所在位置的值为0 则宽度为1 2.当前所在位置的值大于0 则宽度通过不断取商得到 3.当前所在位置的值大于0 则…

Vitis HLS 学习笔记--IDE软件高效操作指引

目录 1. 简介 2. 实用软件操作 2.1 C/RTL Cosimulation 选项 2.2 Do not show this dialog again 2.3 New Solution 2.4 对比 Solution 2.5 以命令行方式运行&#xff08;windows&#xff09; 2.6 文本缩放快捷键 2.7 查看和修改快捷键 2.8 将Vitis HLS RTL 导入 Viv…

SpikingJelly笔记之梯度替代

文章目录 前言一、梯度替代二、网络结构三、MNIST分类1、单步模式2、多步模式 总结 前言 在SpikingJelly使用梯度替代训练SNN&#xff0c;构建单层全连接SNN实现MNIST分类任务。 一、梯度替代 1、梯度替代&#xff1a; 阶跃函数不可微&#xff0c;无法进行反向传播 g ( x ) …

自动驾驶新书“五一”节马上上市了

我和杨子江教授合写的《自动驾驶系统开发》终于在清华大学出版社三校稿之后即将在五一节后出版。 清华大学汽车学院的李克强教授和工程院院士撰写了序言。 该书得到了唯一华人图灵奖获得者姚期智院士、西安交大管晓宏教授和科学院院士以及杨强教授和院士等的推荐&#xff0c;…

java:SpringBootWeb请求响应

Servlet 用java编写的服务器端程序 客户端发送请求至服务器 服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器 服务器将响应返回给客户端 javaweb的工作原理 在SpringBoot进行web程序开发时,内置了一个核心的Servlet程序DispatcherServlet,称之…

前端用a标签实现静态资源文件(excel/word/pdf)下载

接上文实现的 前端实现将二进制文件流&#xff0c;并下载为excel文件后&#xff0c; 实际项目中一般都会有一个模版下载的功能&#xff0c;一般都由服务端提供一个下载接口&#xff0c;返回文件流或url地址&#xff0c;然后前端再处理成对应需要的类型的文件。 但是&#xff…

从3秒飞降至25毫秒:揭秘惊艳的接口优化策略!

大家好&#xff0c;最近看到京东云的一位大佬分享的接口优化方案&#xff0c;感觉挺不错的&#xff0c;拿来即用。建议收藏一波或者整理到自己的笔记本中&#xff0c;随时查阅&#xff01; 下面是正文。 一、背景 针对老项目&#xff0c;去年做了许多降本增效的事情&#xf…

如何学习思考能力?如何训练思考能力?思考不一样?问到底 对新敏感 主动 不怕试错 预测 独特一套

简单易行的方法&#xff1a;问到底 一个简单而有效的方法是使用"五个为什么"技术。当面临问题时&#xff0c;反复问自己为什么&#xff0c;至少问五次&#xff0c;以深入了解问题的根本原因。这有助于培养深入思考和分析问题的能力。 对新敏感 学习思考能力的关键…