web-dev-qa-db-ja.com

JTable列幅の自動サイズ変更

内容に合わせてJTableの列幅を自動的にサイズ変更する必要があります。 TableColumnAdjuster クラスは非常に便利だと思いました。しかし、小さな問題があります。 5列あり、その内容は非常に短いとします。その場合、自動調整機能を使用すると、コンテンツに応じて最初の4列の幅が設定され、残りのすべてのスペースが最後の列に割り当てられます。例をご覧ください。

enter image description here

ここで、最後の列Balanceには余分なスペースがすべて与えられています。しかし、中央の列の1つにそのスペースを与える必要がある場合はどうなりますか。上記の場合、3番目の列nameにそのスペースを割り当てる必要があります。 TableColumnAdjusterクラスのadjustColumns()メソッドを変更してみました。しかし、私はそれを機能させることができませんでした。

列サイズを変更するために、column.setPreferredWidth()column.setWidth()の両方を試しました。しかし、何も変わらないようです。 JTableの列サイズを効果的に変更するにはどうすればよいですか。私の主な問題に対する他の代替案または直接的な答えがある場合、それは良いです。ありがとう!

26
Anubis

次を試すことができます:

public void resizeColumnWidth(JTable table) {
    final TableColumnModel columnModel = table.getColumnModel();
    for (int column = 0; column < table.getColumnCount(); column++) {
        int width = 15; // Min width
        for (int row = 0; row < table.getRowCount(); row++) {
            TableCellRenderer renderer = table.getCellRenderer(row, column);
            Component comp = table.prepareRenderer(renderer, row, column);
            width = Math.max(comp.getPreferredSize().width +1 , width);
        }
        if(width > 300)
            width=300;
        columnModel.getColumn(column).setPreferredWidth(width);
    }
}

JTable

これは、サイズ変更メソッドの前に実行する必要があります。
あなたが持っている場合:

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

JTable

57
Paul Vargas

1つの列を他の列よりも自動的にサイズ変更するオプションはありません。

たぶん次のようなことができます:

tca = new TableColumnAdjuster( table, 0 );
tca.adjustColumns();
TableColumnModel tcm = table.getColumnModel();  
TableColumn tc = tcm.getColumn(1);
tc.setWidth(tc.getWidth() + 25);

これにより、列1に余分なスペースを追加できます。この余分なスペースは、テーブルが最初に表示されるときにのみ追加されます。

別のオプションは以下を使用することです:

table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);

これにより、各列に比例して余分なスペースが割り当てられます。

5
camickr

setAutoResizeMode()は、テーブルのサイズを変更する方法を教えて、違いを確認するために利用可能なすべての異なるオプションを試してみる必要があります。他のすべて。

jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
TableColumnModel colModel=jTable1.getColumnModel();
colModel.getColumn(1).setPreferredWidth(25);    
colModel.getColumn(2).setPreferredWidth(400);
3
Edwin Barahona

あなたはこれを行うことができます:

JPanel jp = new JPanel();
jp.add(table);

jp.setLayout(new GridLayout(1,1)); /* little trick ;) and believe me that this step is important to the automatic all columns resize! A import is also needed for using GridLayout*/
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); // this is obvius part
0
augus1990