Swing表格列宽自适应

Swing表格列宽自适应

分类: J2SE 1805人阅读 评论(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
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Java Swing ,可以通过以下方法让 frame 自适应屏幕: 1. 使用 pack() 方法:在 frame 添加所有组件后,可以调用 pack() 方法让 frame 自适应屏幕。 2. 设置 frame 的大小为 Toolkit 的 screenSize:可以通过以下代码设置 frame 的大小为屏幕大小: ``` Toolkit kit = Toolkit.getDefaultToolkit(); Dimension screenSize = kit.getScreenSize(); frame.setSize(screenSize.width, screenSize.height); ``` 3. 设置 frame 的大小为屏幕大小的比例:可以通过以下代码设置 frame 的大小为屏幕大小的一定比例: ``` Toolkit kit = Toolkit.getDefaultToolkit(); Dimension screenSize = kit.getScreenSize(); frame.setSize(screenSize.width/2, screenSize.height/2); ``` ### 回答2: 要使Java Swing的Frame自适应屏幕,可以按照以下步骤进行操作: 1. 获取当前屏幕的宽度和高度。可以使用Toolkit类的getScreenSize()方法来获取屏幕的大小,然后获取屏幕的宽度和高度。 2. 设置Frame的大小。可以使用setSize()或setPreferredSize()方法设置Frame的大小,将获取到的屏幕宽度和高度作为参数传入。 3. 设置Frame的位置。可以使用setLocation()方法设置Frame在屏幕上的位置。一种常见的方法是将Frame的位置设置为屏幕的央,可以使用以下代码实现: int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width; int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height; int frameWidth = // Frame的宽度 int frameHeight = // Frame的高度 int x = (screenWidth - frameWidth) / 2; int y = (screenHeight - frameHeight) / 2; frame.setLocation(x, y); 4. 最后,调用setVisible()方法显示Frame。 通过以上步骤,可以使Java Swing的Frame自适应屏幕,使其大小和位置适应不同屏幕的分辨率和尺寸。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值