内容に合わせてJTableの列幅を自動的にサイズ変更する必要があります。 TableColumnAdjuster
クラスは非常に便利だと思いました。しかし、小さな問題があります。 5列あり、その内容は非常に短いとします。その場合、自動調整機能を使用すると、コンテンツに応じて最初の4列の幅が設定され、残りのすべてのスペースが最後の列に割り当てられます。例をご覧ください。
ここで、最後の列Balance
には余分なスペースがすべて与えられています。しかし、中央の列の1つにそのスペースを与える必要がある場合はどうなりますか。上記の場合、3番目の列name
にそのスペースを割り当てる必要があります。 TableColumnAdjuster
クラスのadjustColumns()
メソッドを変更してみました。しかし、私はそれを機能させることができませんでした。
列サイズを変更するために、column.setPreferredWidth()
とcolumn.setWidth()
の両方を試しました。しかし、何も変わらないようです。 JTable
の列サイズを効果的に変更するにはどうすればよいですか。私の主な問題に対する他の代替案または直接的な答えがある場合、それは良いです。ありがとう!
次を試すことができます:
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);
}
}
これは、サイズ変更メソッドの前に実行する必要があります。
あなたが持っている場合:
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
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);
これにより、各列に比例して余分なスペースが割り当てられます。
setAutoResizeMode()は、テーブルのサイズを変更する方法を教えて、違いを確認するために利用可能なすべての異なるオプションを試してみる必要があります。他のすべて。
jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
TableColumnModel colModel=jTable1.getColumnModel();
colModel.getColumn(1).setPreferredWidth(25);
colModel.getColumn(2).setPreferredWidth(400);
あなたはこれを行うことができます:
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