ヘッダーが保持するテキストのサイズよりも小さくなるように、JTableのサイズが変更されないようにしようとしています。私が抱えている問題は、各ヘッダーコンポーネントの最小優先幅が10しかないことです。これは、各ヘッダーコンポーネントの値が「ヘッダー1」、「ヘッダー2」、「ヘッダー3」などの場合、明らかに小さすぎます。の上。
私はSOの検索に多くの時間を費やし、さまざまな提案を実装しようとしましたが、まだ解決策を見つけることができていません。拡張JTableの一部として使用している現在のコードを参照してください。
public class MyTable extends JTable {
private Map<Integer, Integer> minSizeMap;
public void calculateMinColumnSizes() {
int width = 0;
int row = 0;
minSizeMap = new HashMap<Integer, Integer>();
for (int column = 0; column < columnModel.getColumnCount(); column++) {
TableColumn tableColumn = columnModel.getColumn(column);
TableCellRenderer renderer = tableColumn.getCellRenderer();
Component comp = this.prepareRenderer(renderer, row, column);
width = Math.max(comp.getPreferredSize().width, width);
minSizeMap.put(tableColumn.getModelIndex(), width);
}
}
}
元のコードは、 JTable列のサイズを文字列の長さに変更する方法に対するkleopatraの回答に基づいています。、しかし、現時点では、各列ヘッダーの最小推奨幅のみを取得し、サイズ変更後に後で比較できるように保存したいので、パーツを変更しました。
メソッドを呼び出す前にすべてのモデルが設定されているため、TableColumnのminWidthとpreferredWidthのデフォルトがそれぞれ15と75の場合に、コンポーネントの優先幅が10になる方法について少し戸惑います。
私が何をしたか/間違って理解したかについてのアイデアはありますか?