1

我有一个JTable和一个JComboBox。当我在组合框中选择一个项目时,我希望某些列隐藏,当我在组合框中选择另一个项目时,相同的隐藏列重新出现。我写的,

jTable1.getColumnModel().getColumn(8).setMinWidth(0)
jTable1.getColumnModel().getColumn(8).setMaxWidth(0)
jTable1.getColumnModel().getColumn(8).setWidth(0)

隐藏列,但是当我再次写

jTable1.getColumnModel().getColumn(8).setMinWidth(100)
jTable1.getColumnModel().getColumn(8).setMaxWidth(100)
jTable1.getColumnModel().getColumn(8).setWidth(100)

隐藏的列不可见。

4

4 回答 4

1

原因是 setMin/setMax 都强制执行关系

min <= width <= max

这就是方法调用的顺序

// hiding
column.setMinWidth(0);
column.setMaxWidth(0);

// showing
column.setMaxWidth(100);
column.setMinWidth(100);

请注意,您无需调用 setWidth,这是在内部处理的。

也就是说:强制尺寸是..一种黑客行为。考虑使用一个干净的解决方案,例如SwingX之类的框架,它具有(以及其他细节:-) 对列隐藏的全面支持

于 2012-10-21T09:52:38.670 回答
1

上面的代码有什么问题

除了 kleopatra 的有用见解,记录在这里,一些 L&F 或多或少是合作的。例如,com.apple.laf.AquaLookAndFeel总是在 之后留下足够的宽度来拖动setMinWidth(0),尽管可以手动将列强制为零宽度。

于 2012-10-21T13:37:07.910 回答
1

使用JTable#removeColumnJTable#addColumn。这些操作只影响视图端,不影响模型端

于 2012-10-21T10:46:52.463 回答
0
for (int i = 0; i < 2; i++) {
    jTable1.getColumnModel().getColumn(8).setMinWidth(100)
    jTable1.getColumnModel().getColumn(8).setMaxWidth(100)
    jTable1.getColumnModel().getColumn(8).setWidth(100)
}

列将变得可见。

于 2012-10-21T08:42:30.530 回答