如何设置表格列的宽度

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package table;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.util.Locale;
import java.util.Vector;

/**
 *
 * @author max
 */
public class TableColumnWidth {

    private JTable table;

    public TableColumnWidth()
    {
        JFrame frame = new JFrame();
        frame.getContentPane().setLayout(new BorderLayout());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocale(Locale.getDefault());
        frame.setResizable(true);
        frame.setState(Frame.NORMAL);
        

        table = new JTable();
        String TrunkColumnNames[] = {
            "繁华",
            "似锦"
        };
        DefaultTableModel tableModel = new DefaultTableModel();
        tableModel.setColumnIdentifiers(TrunkColumnNames);

        Integer[] m = new Integer[2];
        int j = 0;
        for(int k=0;k<10;k++)
        {
            for(int i = 0;i < 2;i++)
            {
                j += i;
                m[i] = j;
            }
            tableModel.addRow(m);
        }
        

        table.setModel(tableModel);
        setTableHeaderWidth();

        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.getViewport().add(table);
        panel.add(scrollPane,BorderLayout.CENTER);

        frame.getContentPane().add(panel,BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
        
    }

    /**调整表格列的宽度。*/          //1
    private void setTableHeaderWidth()
    {
      for(int i=0;i<table.getColumnCount();i++)
      {
        TableColumn tc=table.getColumn(table.getColumnName(i));
        int width=getPreferredWidthForColumn(tc)+10;
        tc.setMinWidth(width);
      }
    }

    /**获取一个列的推荐宽度,返回列名和列取值的最大宽度。*/  //2
    private int getPreferredWidthForColumn(TableColumn col)
    {
      int hw=columnHeaderWidth(col),
          cw=widestCellInColumn(col);
      return hw>cw?hw:cw;
    }

    /**表头列的宽度*/  //3
    private int columnHeaderWidth(TableColumn col)
    {
      TableCellRenderer renderer=col.getHeaderRenderer();
      if(renderer==null)
      {
        renderer=table.getTableHeader().getDefaultRenderer();
      }
      if(renderer==null)
          return 0;
      Component comp=renderer.getTableCellRendererComponent(table,col.getHeaderValue(),false,false,0,0);
      return comp.getPreferredSize().width;
    }

    /**值列的最大宽度*/  //4
    private int widestCellInColumn(TableColumn col)
    {
      if(true) return 0;
      int c=col.getModelIndex(),width=0,maxw=0;
      for(int r=0;r<table.getRowCount();++r)
      {
        TableCellRenderer renderer=table.getCellRenderer(r,c);
        Component comp=renderer.getTableCellRendererComponent(table,table.getValueAt(r,c),false,false,r,c);
        width=comp.getPreferredSize().width;
        maxw=width>maxw?width:maxw;
      }
      return maxw;
    }
    public static void main(String[] args)
    {
        TableColumnWidth a = new TableColumnWidth();
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值