当前位置:编程学习 > JAVA >>

Swinghacks——JTable根据内容调整列宽

JTable默认情况下,列宽是固定值,如下:
若要根据内容来调整列宽,那首先要知道内容占用多少宽度,代码如下
[java]  
int maxwidth = 0;  www.zzzyk.com
for (int row=0; row<table.getRowCount(); row++) {  
    TableCellRenderer rend = table.getCellRenderer (row, col);  
    Object value = table.getValueAt (row, col);  
    Component comp =  
        rend.getTableCellRendererComponent (table,   
                                            value,  
                                            false,  
                                            false,  
                                            row,  
                                            col);  
    maxwidth = Math.max (comp.getPreferredSize().width,  
                         maxwidth);  
}  
这段代码是在计算列内容中的最大值maxwidth,其原理是这样的
1、通过数据模型TableModel获取该列某行的值数据
[java]  
Object value = table.getValueAt (row, col);  
2、用渲染方法把值数据转换成显示的组件,就是这个方法getTableCellRendererComponent
如果不了解MVC模型和JTable的渲染器的话,建议看这篇文章http://blog.csdn.net/mylxiaoyi/article/details/8192998
getTableCellRendererComponent方法应该是jtable调用来把数据模型的数据渲染成component,然后显示在jtable的单元格上,所以我们看到的jtable单元格都是这个方法返回的component
3、现在主动调用getTableCellRendererComponent方法,获取到要显示的component,然后getPerferredSize,再筛选出最大值就行
4、最后把筛选出的最大值设置为column的宽度即可
上图已经是根据内容调整列宽了,但是还有一个缺点就是第一列,只考虑到了列内容的宽度,但是没有考虑到表头的内容宽度
不过思路也是一样的,获取表头的数据模型 和 渲染器,然后主动构造出表头的component获取PerferredSize,再判断下列宽值即可
[java] 
TableCellRenderer headerRenderer = column.getHeaderRenderer();  
if (headerRenderer == null)  
    headerRenderer = table.getTableHeader().getDefaultRenderer();  
Object headerValue = column.getHeaderValue();  
Component headerComp =   
        headerRenderer.getTableCellRendererComponent (table,   
                                                      headerValue,  
                                                      false,  
                                                      false,  
                                                      0,  
                                                      col);  
maxwidth = Math.max (maxwidth,   
                     headerComp.getPreferredSize().width);  
 
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,