2009-04-01

Java : JTable のセルの幅を設定したい


JTable のセルの幅を設定したい。
※ 但し、表示後のサイズ変更は可としてみる



import java.awt.Dimension;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableColumnModel;

public class Sample extends JFrame {

    private String[] columnNames = { "A", "B", "C", "D", "E" };

    private String[][] sampleData = {{ "a", "1", "い", "", "1234567890"}
                                    , { "b", "2", "ろ", "", "4444444444"}
                                    , { "c", "3", "は", "", "wwwwwwwwww"}
                                    , { "d", "4", "に", "", "IIIIIIIIII"}};

    public Sample() {
        JTable table = new JTable(sampleData, columnNames);
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        table.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 14));
        // ヘッダ
        DefaultTableColumnModel colHeaderModel = (DefaultTableColumnModel) table.getTableHeader().getColumnModel();
        for (int i=0; i<colHeaderModel.getColumnCount(); i++) {
            colHeaderModel.getColumn(i).setPreferredWidth(((i+1) * 30));        // ヘッダセルの幅を設定
        }
        // データ
        DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel();
        for (int i=0; i<colModel.getColumnCount(); i++) {
            colModel.getColumn(i).sizeWidthToFit();                             // ヘッダセルの幅に合うように設定
        }
        JScrollPane sp = new JScrollPane(table);
        sp.setPreferredSize(new Dimension(500, 200));
        JPanel panel = new JPanel();
        panel.add(sp);
        getContentPane().add(panel);
    }

    public static void main(String[] args) {
        Sample frame = new Sample();
        frame.setTitle("sample");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(60, 60, 600, 600);
        frame.setVisible(true);
    }
}

0 件のコメント:

コメントを投稿