内部のデータに応じて、JTableの列幅を一致させようとしています。私のコード:
for(int column = 0; column < gui.testsuiteInfoTable.getColumnCount(); column ++){
int width =0;
for (int row = 0; row < gui.testsuiteInfoTable.getRowCount(); row++) {
TableCellRenderer renderer = gui.testsuiteInfoTable.getCellRenderer(row, column);
Component comp = gui.testsuiteInfoTable.prepareRenderer(renderer, row, column);
width = Math.max (comp.getPreferredSize().width, width);
System.out.println(width);
}
TableColumn col = new TableColumn();
col = gui.testsuiteInfoTable.getColumnModel().getColumn(column);
System.out.println(width);
col.setWidth(width);
gui.testsuiteInfoTable.revalidate();
}
}
サイズは正しいと思いますが、テーブルの列はすべて同じ幅です。テーブルはGridBagLayoutのScrollPaneに埋め込まれていますが、それが問題ですか?提案をありがとう。
追加のライブラリを使用できる場合は、Swingxを試してください( https://Java.net/projects/swingx )そこには、メソッド「packAll()」を備えたJXTableがあります。求めている
必要なのはこれだけです。
JTable table = new JTable(){
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component component = super.prepareRenderer(renderer, row, column);
int rendererWidth = component.getPreferredSize().width;
TableColumn tableColumn = getColumnModel().getColumn(column);
tableColumn.setPreferredWidth(Math.max(rendererWidth + getIntercellSpacing().width, tableColumn.getPreferredWidth()));
return component;
}
};
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
テーブルは、コンテンツに合わせて各列幅を自動的に調整します。サイズ変更をトリガーするタイミングを制御する必要はありません。
_col.setWidth(width);
_
JTable APIを読み、_How to Use Tables
_のリンクをたどります。そのチュートリアルでは、setPreferredWidth(...)
を使用して列の幅を提案します。
Table Column Adjuster をチェックすることもできます。これはあなたのためにこれを行います。このソリューションでは、列ヘッダーの幅も考慮に入れることができます。