JTable 的排序+过滤+渲染

本文介绍了JTable在Java Swing中的排序、过滤功能及其在实际操作中的应用。通过设置TableRowSorter的RowFilter实现表格数据的过滤,点击表头可触发内置排序。尽管表格显示的内容会因排序和过滤而变化,但底层TableModel的数据顺序保持不变。当需要获取选中数据在Model中的索引时,需注意转换方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,jtable本身只是一个框架,它是根据tablemodel来显示数据的,我们能看到几行,table就有几行,但tablemodel

并非如此,因为可能只显示了其中的几行。


排序:

从jdk1.6开始,jtable可以通过点击header来排序了!使用方法如下:

TableRowSorter<DefaultTableModel> sorter= new TableRowSorter<DefaultTableModel>(tablemodel); 
jtable.setRowSorter(sorter);
可见,TableRowSorter需要一个底层的tablemodel来装载数据。一般选择重写tablemodel的方法来自定义排序规则,加快排序速度:

DefaultTableModel tablemodel = new DefaultTableModel(obj,goodsInfo)
				{
					private static final long serialVersionUID = 1L;
					//--设置不可编辑-------
					public boolean isCellEditable(int row,int column)
					{
						return false;
					}
					//--定义按类的比较规则排序---------
					public Class<?> getColumnClass(int column) {  
				        Class<?> returnValue = Object.class;  
				        if ((column >= 0) && (column < getColumnCount())&& (getRowCount()>0)) 
				        {	//排除某些cell是空的情况
				        	for(int i=0;i<getRowCount();i++)
				        		if(getValueAt(i, column)!=null)
				        			returnValue = getValueAt(i, column).getClass();
				       	}
				        return returnValue;  
			}
				};

过滤:

TableRowSorter有个方法是setRowFilter,可以实现过滤,它继承自DefaultRowSorter,使用方法:

sorter.setRowFilter(RowFilter.regexFilter(".*foo.*"));
可以用正则表达式来过滤。

这时候,我们看到的行数变了,即table.getRowCount()变了,但底层的tablemodel行数是不会变的!


接下来,讲另一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值