我试图防止我的 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);
}
}
}
原始代码来自 kleopatra 对How to resize JTable column to string length 的回答?,但是我已经更改了部分,因为目前我只想获取每个列标题的最小首选宽度,并将其存储起来以供调整大小后进行比较。
在我调用该方法之前,所有模型都已设置好,所以当 TableColumn 的 minWidth 和 preferredWidth 默认值分别为 15 和 75 时,我对组件首选宽度如何获得 10 感到有些困惑。
关于我做错了什么/理解错误的任何想法?