gpt4 book ai didi

java - 如何获得 JTable 列标题组件的最小首选宽度,使其不能调整为小于该值?

转载 作者:搜寻专家 更新时间:2023-11-01 01:55:31 26 4
gpt4 key购买 nike

我试图阻止我的 JTable 以标题小于它们所包含的文本大小的方式重新调整大小。我遇到的问题是,我为每个 header 组件获得的最小首选宽度仅为 10,当每个 header 组件中的值为“ header 1”、“ header 2”、“ header 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 感到有点困惑。

关于我做错了什么/理解错了什么?

最佳答案

我在您的代码中发现了几个问题:

  1. 您不使用表头渲染器,而是使用 TableColumn 单元格渲染器(它们可能不同)
  2. 您测试第一行的首选大小,而不是标题
  3. 你使用 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);
}

关于java - 如何获得 JTable 列标题组件的最小首选宽度,使其不能调整为小于该值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10807418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com