我们使用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(); int totalColumnWidth = 0; int maxDisplayWidth = 1000; int blankLength = 20; for (int column = 0; column < table.getColumnCount(); column++) { int titleWidth = 0; int width = 100; 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而设定的长度。