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

目录
相关文章
|
3月前
|
Web App开发 前端开发 测试技术
你可能对position和z-index有一些误解
该文章深入解析了CSS中`position`属性的各个取值(static、relative、absolute、fixed、sticky)的使用场景及`z-index`在层叠上下文中如何确定元素的堆叠顺序,并通过具体例子展示了这些属性的实际应用效果。
你可能对position和z-index有一些误解
|
7月前
element-plus table表格cell-style的使用
element-plus table表格cell-style的使用
537 1
|
存储 安全 关系型数据库
Column length too big for column ‘remark‘ (max=65535)解决办法
Column length too big for column ‘remark‘ (max=65535)解决办法
313 0
The Double Linknode for Linear table | Data
The some code in Data book (5th Edition) from the 54 page to 55 page
96 0
|
索引 Python
成功解决ValueError: column index (256) not an int in range(256)
成功解决ValueError: column index (256) not an int in range(256)
成功解决ValueError: column index (256) not an int in range(256)
ListView列宽自适应,设置ListView.Column[0].Width := -1;
使用TListView列表显示内容,如果列内容过长,就会显示成‘XXX…’形式,此时如果双击列标题,列宽将变为自适应。用代码设置如下: 1、设置ListView.Column[0].Width := -1;//列宽根据列内容自适应,此时保证列内容都可见。
3115 0
|
Web App开发 关系型数据库 Java
Data truncation: Data too long for column 'xxx' at row 1
版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢。 https://blog.csdn.net/testcs_dn/article/details/78870542 ...
2141 0
|
Web App开发 Java 关系型数据库
Data truncation: Data too long for column &#39;xxx&#39; at row 1
Data truncation: Data too long for column 'xxx' at row 1 完整的错误内容可能是下面这样的: p.p1 {margin: 0.0px 0.0px 0.
2243 0