我试图阻止我的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?的回答,但是我已经更改了部分,因为我只想获得每个列标题的最小首选宽度,并在调整大小后存储它以供以后比较。 / p>
在调用方法之前已经设置了所有模型,所以当TableColumn的minWidth和preferredWidth默认值分别为15和75时,我对组件首选宽度的得分有点感到困惑。 / p>
关于我做了什么/理解错误的任何想法?
答案 0 :(得分:6)
我在您的代码中看到了几个问题:
width = Math.max(comp.getPreferredSize().width, width);
根本没有任何意义这是一个可以让你前进的片段:
for (int column = 0; column < columnModel.getColumnCount(); column++) {
TableColumn tableColumn = columnModel.getColumn(column);
TableCellRenderer renderer = tableColumn.getHeaderRenderer();
if (renderer == null) {
renderer = getTableHeader().getDefaultRenderer();
}
Component component = renderer.getTableCellRendererComponent(this,
tableColumn.getHeaderValue(), false, false, -1, column);
minSizeMap.put(tableColumn.getModelIndex(), component.getPreferredSize().width);
}