Jtable Auto Resize Column

简介:

我们使用Jtable的时候,有的时候内容的文字不能完全显示出来,这时候就需要一个方法能够随着文字和标题的长度伸缩Column的大小。下面的方法只需要把Jtable传入即可自适应,最后的返回值totalColumnWidth指明了每一行所需的width,如果你是使用Box嵌套的Jtable的话,那就可以使用

tableBox.setPreferredSize(new Dimension(totalColumnWidth+20,500));

指定Jtable的宽度。达到很好地美观。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
* resize the column width of Jtable
* @param table
* @return
*/

private int resizeColumnWidth(JTable table) {
final TableColumnModel columnModel = table.getColumnModel();
//totalColumnWidth means the Width that Jtable needed.
int totalColumnWidth = 0;
//each column length should be less than maxDisplayWidth and use maxDisplayWidth when length > maxDisplayWidth
int maxDisplayWidth = 1000;
//the blankLength that put the sort icon when sort.
int blankLength = 20;
for (int column = 0; column < table.getColumnCount(); column++) {
int titleWidth = 0;
int width = 100; // Min width
for (int row = 0; row < table.getRowCount(); row++) {
TableCellRenderer renderer = table.getCellRenderer(row, column);
Component comp = table.prepareRenderer(renderer, row, column);
width = Math.max(comp.getPreferredSize().width , width);
width = width > maxDisplayWidth ? maxDisplayWidth : width;
}
TableColumn tableColumn = table.getTableHeader().getColumnModel().getColumn(column);
TableCellRenderer renderer2 = tableColumn.getHeaderRenderer();
if (renderer2 == null) {
renderer2 = table.getTableHeader().getDefaultRenderer();
}
Component comp2 = renderer2.getTableCellRendererComponent(table, tableColumn.getHeaderValue(), false, false, -1, column);
titleWidth = comp2.getPreferredSize().width;
width = titleWidth > width ? titleWidth + blankLength : width;

totalColumnWidth += width;
columnModel.getColumn(column).setPreferredWidth(width);
}
return totalColumnWidth;
}

2. 使用

两个for循环里面拿到(row,width)的值进行计算width,与我们设置的maxDisplayWidth进行比较(根据业务不同可以选择删除),TableColumn是为了标题过长,而内容过短的情况,如果内容过短,使用内容得到的width显然会把标题遮住,所以这里加上限制,后面的blankLength是为了点击标题进行排序的时候会出来一个icon而设定的长度。

目录
相关文章
|
4月前
|
前端开发 JavaScript 索引
前端性能优化:虚拟滚动技术原理与实战
前端性能优化:虚拟滚动技术原理与实战
572 80
|
数据采集 存储 Java
「多线程大杀器」Python并发编程利器:ThreadPoolExecutor,让你一次性轻松开启多个线程,秒杀大量任务!
「多线程大杀器」Python并发编程利器:ThreadPoolExecutor,让你一次性轻松开启多个线程,秒杀大量任务!
361 0
空心电抗器的matlab建模与性能仿真分析
空心电抗器是一种无铁芯的电感元件,通过多层并联导线绕制而成。其主要作用是限制电流、滤波、吸收谐波和提高功率因数。电抗器的损耗包括涡流损耗、电阻损耗和环流损耗。涡流损耗由交变磁场引起,电阻损耗与电抗器半径有关,环流损耗与各层电流相关。系统仿真使用MATLAB2022a进行。
|
数据采集 存储 安全
如何确保Python Queue的线程和进程安全性:使用锁的技巧
本文探讨了在Python爬虫技术中使用锁来保障Queue(队列)的线程和进程安全性。通过分析`queue.Queue`及`multiprocessing.Queue`的基本线程与进程安全特性,文章指出在特定场景下使用锁的重要性。文中还提供了一个综合示例,该示例利用亿牛云爬虫代理服务、多线程技术和锁机制,实现了高效且安全的网页数据采集流程。示例涵盖了代理IP、User-Agent和Cookie的设置,以及如何使用BeautifulSoup解析HTML内容并将其保存为文档。通过这种方式,不仅提高了数据采集效率,还有效避免了并发环境下的数据竞争问题。
215 1
如何确保Python Queue的线程和进程安全性:使用锁的技巧
|
存储 自然语言处理 安全
软件开发交易平台-猪八戒网APP定制/模板开发/二次开发
 数字货币交易所系统开发的优势都在哪里呢?数字货币交易所主要以数字货币作为交易对象,围绕其所形成的交易模式和场景研发的不同种类的交易所平台, 主要包括传统的币币交易、OTC法币交易、杠杆交易、合约交易、止盈止损等特色交易平台。下面是我们对数字货币交易所系统开发优势的介绍,来看看吧!
259 0
|
存储 运维 Kubernetes
kubesphere安装部署附带Metrics server的安装(一)
kubesphere安装部署附带Metrics server的安装
733 0
|
存储 缓存 安全
Java深入学习并发原理总结
Java深入学习并发原理总结
163 0
Java深入学习并发原理总结
pageHelper实现分页异常描述
pageHelper实现分页异常描述
190 0
|
5G 芯片
联发科可能推出6nm工艺芯片,1+3+4结构
近日,有国内靠谱的数码博主@数码闲聊站 爆料称,联发科将推出一款6nm工艺芯片,性能与骁龙865和骁龙865+接近,安兔兔跑分能达到60万分以上。
258 0
联发科可能推出6nm工艺芯片,1+3+4结构