文档章节

Swing表格列宽自适应

涩女郎
 涩女郎
发布于 2014/11/22 12:14
字数 691
阅读 23
收藏 0

Swing表格列宽自适应 


从别人分享的代码中得到了一些启发。 
1.要想实现JTable宽度自适应,必须首先调用setAutoResizeMode方法,将JTable的自适应模适修改为JTable.AUTO_RESIZE_OFF,默认为JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS。 
在设置此方法前,需要先比较如果表格当前的实际大小并没有达到父容器的宽度,则将其设置为AUTO_RESIZE_SUBSEQUENT_COLUMNS使表格充满父容器,这样更好看些。如果超过了父容器的宽度,则设置为JTable.AUTO_RESIZE_OFF,用自已实际计算的宽度进行设置。因些,在这儿需要比较表格的实际大小与父容器的实际大小再进行设置。 
2.宽度自适应需要考虑到表头和表格列数据的实际宽度,对每一列的实际宽度做比较,包括表头,取其中最大值,并设置其值为比较后的最大值。注意,需要调用table().getColumnModel().getColumn(j).setPreferredWidth(max)而不是setWidth方法。 
3.一般我们在程序使用过程中都会把JTable加到一个JScrollPane中,以便使JTable实现滚动功能。因此,当我们要达到自适应时,将表格自适应属性设置为JTable.AUTO_RESIZE_OFF后,需要为父容器填加ComponentListener,并实现componentResized方法,在该方法中对表格的宽度进行自适应设置。 
4.具体代码如下: 

//表格 
JTable table=new JTable(); 
//表格要增加的滚动面板 
JScrollPane scrollPane=new JScrollPane(table); 

//为滚动面板添加ComponentListener 
tablePanel.addComponentListener(new ComponentAdapter() { 
            @Override 
            public void componentResized(ComponentEvent e) { 
                resizeTable(true); 
            } 
}); 
//表格自适应方法,需要在表格初始化后,父容器大小发生变化后以及表格模型修改后调用 
public void resizeTable(boolean bool) { 
        Dimension containerwidth = null; 
        if (!bool) { 
            //初始化时,父容器大小为首选大小,实际大小为0 
            containerwidth = scrollPane.getPreferredSize(); 
        } else { 
            //界面显示后,如果父容器大小改变,使用实际大小而不是首选大小 
            containerwidth = scrollPane.getSize(); 
        } 
        //计算表格总体宽度 
        int allwidth = getTable().getIntercellSpacing().width; 
        for (int j = 0; j < getTable().getColumnCount(); j++) { 
            //计算该列中最长的宽度 
            int max = 0; 
            for (int i = 0; i < getTable().getRowCount(); i++) { 
                int width = getTable(). 
                  getCellRenderer(i, j).getTableCellRendererComponent 
                  (getTable(), getTable().getValueAt(i, j), false, 
                  false, i, j).getPreferredSize().width; 
                if (width > max) { 
                    max = width; 
                } 
            } 
            //计算表头的宽度 
            int headerwidth = getTable(). 
              getTableHeader(). 
              getDefaultRenderer().getTableCellRendererComponent( 
              getTable(), getTable().getColumnModel(). 
              getColumn(j).getIdentifier(), false, false, 
              -1, j).getPreferredSize().width; 
            //列宽至少应为列头宽度 
            max += headerwidth; 
            //设置列宽 
            getTable().getColumnModel(). 
              getColumn(j).setPreferredWidth(max); 
            //给表格的整体宽度赋值,记得要加上单元格之间的线条宽度1个像素 
            allwidth += max + getTable().getIntercellSpacing().width; 
        } 
        allwidth += getTable().getIntercellSpacing().width; 
        //如果表格实际宽度大小父容器的宽度,则需要我们手动适应;否则让表格自适应 
        if (allwidth > containerwidth.width) { 
            getTable().setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
        } else { 
            getTable(). 
              setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS); 
        } 
}

本文转载自:http://blog.csdn.net/hcx_2008/article/details/5638230

涩女郎
粉丝 37
博文 104
码字总数 160210
作品 0
浦东
高级程序员
私信 提问
探索el-table列宽自适应内容的实现

最近项目上线之后,产品对首页的列表提出了列宽自适应内容的需求,即列的宽度由当前列中内容最宽的一个单元格决定(单元格内容不换行)。项目中的表格使用的是element-ui的table组件,非常强...

juenanfeng
05/26
0
0
jqgrid控制列的隐藏显示,怎么使table的宽度不变?

jqgrid属性:   width: Grid的宽度,如果未设置,则宽度应为所有列宽的之和;如果设置了宽度,则每列的宽度将会根据shrinkToFit选项的设置,进行设置。   shrinkToFit: 此 选项用于根据...

迷糊蛋
2016/09/08
722
0
企户动CSS框架

企户动CSS框架是一个HTML、CSS前端框架,能够完美支持IE6~7在内的所有浏览器!给你的Web开发提供了自适应宽度的百分比多列网格,以及已语义化和结构化的标题、段落、列表、表格、按钮、图文混...

方雨_Yu
2014/05/10
1K
0
【基础】固定列宽的表格及示例演示

引言 对我来说, 有一个非常有用,支持性也很好的 属性,但它却很少为人所知。它改变了表格的渲染方式,并生成一个更加稳定可靠的布局。 它就是: 的缺省值是 ,这个属性值及其效果大家十分熟...

毛三十
2018/08/14
0
0
css揭秘实战技巧 - 结构与布局[六]

全目录 本系列文章,主要是围绕css3属性,实现我们常见的各种效果,这些效果都是我们实战开发中经常可以用到的效果: css揭秘实战技巧- 背景与边框 [一] css揭秘实战技巧- 形状 [二] css揭秘...

沉默抒怀者
05/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

一起来学Java8(四)——复合Lambda

在一起来学Java8(二)——Lambda表达式中我们学习了Lambda表达式的基本用法,现在来了解下复合Lambda。 Lambda表达式的的书写离不开函数式接口,复合Lambda的意思是在使用Lambda表达式实现函...

猿敲月下码
24分钟前
7
0
debian10使用putty配置交换机console口

前言:Linux的推广普及,需要配合解决实际应用方能有成效! 最近强迫自己用linux进行实际工作,过程很痛苦,还好通过网络一一解决,感谢各位无私网友博客的帮助! 系统:debian10 桌面:xfc...

W_Lu
55分钟前
10
0
aelf Enterprise 0.8.0 beta有奖公测,“Bug奖金计划”重磅开启

2019年9月30日,aelf Enterprise 0.8.0 beta版正式发布。aelf Enterprise 0.8.0 beta是一个完备的区块链系统, 包含完备的区块链系统、开发套件、开发文档、以及配套的基础应用和基础服务。 ...

AELF开发者社区
57分钟前
10
0
oracle 初始化数据库脚本

create user lpf identified by 123456; create tablespace lpf_ts_cms datafile '/opt/app/oracle/product/11.2.0/lpf.dbf' size 200M; alter user lpf default tablespace lpf_ts_cms; sel......

internetafei
今天
8
0
深入了解Redis底层数据结构

说明 说到Redis的数据结构,我们大概会很快想到Redis的5种常见数据结构:字符串(String)、列表(List)、散列(Hash)、集合(Set)、有序集合(Sorted Set),以及他们的特点和运用场景。不过它们是...

TurboSanil
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部