Jtable Auto Resize Column

  1. 云栖社区>
  2. 博客>
  3. 正文

Jtable Auto Resize Column

benjaminwhx 2016-05-19 13:35:00 浏览971
展开阅读全文

我们使用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而设定的长度。

网友评论

登录后评论
0/500
评论
benjaminwhx
+ 关注