32

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

ここに画像の説明を入力

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

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

4

4 に答える 4

69

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

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

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

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

JTable

于 2013-07-13T06:09:01.850 に答える
4

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

多分あなたは次のようなことができます:

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);

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

于 2013-07-13T15:41:08.373 に答える
4

setAutoResizeMode()は、テーブルのサイズを変更する方法を教えてくれます。違いを確認するには、すべての異なるオプションを試してみてください.

jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
TableColumnModel colModel=jTable1.getColumnModel();
colModel.getColumn(1).setPreferredWidth(25);    
colModel.getColumn(2).setPreferredWidth(400);
于 2017-04-08T22:43:54.670 に答える
1

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

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
于 2014-09-18T09:45:53.950 に答える