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而设定的长度。

目录
相关文章
|
数据采集 存储 Java
「多线程大杀器」Python并发编程利器:ThreadPoolExecutor,让你一次性轻松开启多个线程,秒杀大量任务!
「多线程大杀器」Python并发编程利器:ThreadPoolExecutor,让你一次性轻松开启多个线程,秒杀大量任务!
464 0
|
6月前
|
前端开发 JavaScript 索引
前端性能优化:虚拟滚动技术原理与实战
前端性能优化:虚拟滚动技术原理与实战
821 80
|
机器学习/深度学习 人工智能 弹性计算
阿里云林立翔:基于阿里云GPU的AIGC小规模训练优化方案
阿里云弹性计算林立翔在【AIGC】话题下带来了题为《基于阿里云GPU的AIGC小规模训练优化方案》的主题演讲,围绕生成式AI技术栈、生成式AI微调训练和性能分析、ECS GPU实例为生成式AI提供算力保障、应用场景案例等相关话题展开。
|
数据采集 存储 安全
如何确保Python Queue的线程和进程安全性:使用锁的技巧
本文探讨了在Python爬虫技术中使用锁来保障Queue(队列)的线程和进程安全性。通过分析`queue.Queue`及`multiprocessing.Queue`的基本线程与进程安全特性,文章指出在特定场景下使用锁的重要性。文中还提供了一个综合示例,该示例利用亿牛云爬虫代理服务、多线程技术和锁机制,实现了高效且安全的网页数据采集流程。示例涵盖了代理IP、User-Agent和Cookie的设置,以及如何使用BeautifulSoup解析HTML内容并将其保存为文档。通过这种方式,不仅提高了数据采集效率,还有效避免了并发环境下的数据竞争问题。
245 1
如何确保Python Queue的线程和进程安全性:使用锁的技巧
|
存储 自然语言处理 安全
软件开发交易平台-猪八戒网APP定制/模板开发/二次开发
 数字货币交易所系统开发的优势都在哪里呢?数字货币交易所主要以数字货币作为交易对象,围绕其所形成的交易模式和场景研发的不同种类的交易所平台, 主要包括传统的币币交易、OTC法币交易、杠杆交易、合约交易、止盈止损等特色交易平台。下面是我们对数字货币交易所系统开发优势的介绍,来看看吧!
268 0
|
存储 运维 Kubernetes
kubesphere安装部署附带Metrics server的安装(一)
kubesphere安装部署附带Metrics server的安装
770 0
|
存储 缓存 安全
Java深入学习并发原理总结
Java深入学习并发原理总结
174 0
Java深入学习并发原理总结
pageHelper实现分页异常描述
pageHelper实现分页异常描述
197 0
|
5G 芯片
联发科可能推出6nm工艺芯片,1+3+4结构
近日,有国内靠谱的数码博主@数码闲聊站 爆料称,联发科将推出一款6nm工艺芯片,性能与骁龙865和骁龙865+接近,安兔兔跑分能达到60万分以上。
284 0
联发科可能推出6nm工艺芯片,1+3+4结构
|
Go Docker 容器
安装并运行RunC
本文讲的是安装并运行RunC,【编者的话】 Docker 是时下最为流行的开源容器技术,而 runC又是opencontainer发布的一款根据OCF 规范批量生成和运行容器的CLI工具。现在让我们来认识一下这个工具。
3186 0