gpt4 book ai didi

java - 动态设置 TableColumns 的宽度

转载 作者:行者123 更新时间:2023-11-29 03:49:17 24 4
gpt4 key购买 nike

private float[] cwidth = { 0.1f, 0.3f, 0.3f, 0.2f, 0.1f };

setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

for (int i = 0; i < cwidth.length; i++) {
getColumnModel().getColumn(i).setPreferredWidth((int) (getPreferredScrollableViewportSize().width * cwidth[i]));
}

我有以下问题:

我有一个包含 5 列的 JTable。第一个是一个 3 位数字,第二个是一个字符串,然后是一个 JProgressBar,另一个字符串和一个按钮。

现在我希望它们的宽度取决于表格的大小。上面你可以看到我的实际尝试,但这不起作用。

我已经在网上搜索过,但我发现的一切都没有帮助我,因为它总是关于将大小设置为非动态大小。

我希望你能帮助我。

感谢您的帮助。我喜欢这一面!!

这是我的解决方案:

for (int i = 0; i < cwidth.length; i++) {
getColumnModel().getColumn(i).setPreferredWidth((int) (600 * cwidth[i]));
getColumnModel().getColumn(i).setMinWidth((int) (100 * cwidth[i]));
getColumnModel().getColumn(i).setMaxWidth((int) (1000 * cwidth[i]));
}

最佳答案

干扰表格的内部列布局并非微不足道(基本上,它是它自己的 LayoutManager,列作为“子项”)。从好的方面来说:默认行为并没有那么糟糕,它已经有了合理的调整大小模式。默认的 resizeAll 很可能只需要一点配置就可以做你想做的事——这并不过分直观:-)

首先,请阅读 JTable.doLayout() 的 api 文档 - 它描述了确切的行为。最重要的一点是了解多余的宽度是如何跨列分布的:

deltaI = (excess) * ((maxI - prefI) / (maxAll - prefAll)) 

(postFix I 分别表示单个列和所有单个值的总和),即 max/pref 的个体差异与 max/pref 的总和的因子。看起来是一个合理的决定,只是......默认最大值为 Integer.MAX,该因子对于所有列都大致相同,而不管它们的 prefWidht。这基本上就是为什么调整大小看起来如此不直观以及为什么您需要调整 maxSize(正如@Lajos Arpad 已经指出的:-)以获得合理的默认调整行为。

因此,不要尝试自己动手(这不是一个好主意,与 LayoutManagers 一样),而是根据需要配置列属性:

// start out with a reasonable pref size, f.i. from a prototype or 
// measuring the actual cell content (both supported by JXTable)
forEachColumn
column.setPreferredWidth(....);

// then configure the maxWidth proportionally
private float[] cwidth = { 0.1f, 0.3f, 0.3f, 0.2f, 0.1f };
forEachColumn
int max = ((int) (1000f * cwidth[columnExt.getModelIndex()]));
columnExt.setMaxWidth(max);

请注意,1000 是一个任意的魔数(Magic Number),您可能想尝试一下,它取决于屏幕分辨率和用户期望

关于java - 动态设置 TableColumns 的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9497167/

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