我有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)
隐藏的列不会显示。
答案 0 :(得分:1)
原因是setMin / setMax都强制执行关系
min <= width <= max
这是调用事项的方法的顺序
// hiding
column.setMinWidth(0);
column.setMaxWidth(0);
// showing
column.setMaxWidth(100);
column.setMinWidth(100);
请注意,您无需调用setWidth,即内部处理。
那说:强迫大小是......一个黑客。考虑使用干净的解决方案,f.i。像SwingX这样的框架,其中包括(以及其他细节:-)对列隐藏的全面支持
答案 1 :(得分:1)
使用JTable#removeColumn
和JTable#addColumn
。这些操作仅影响视图侧,而不影响模型侧
答案 2 :(得分:1)
上面的代码中有什么问题?
除了kleopatra的帮助insight,记录here,一些L&amp; Fs或多或少合作。例如,com.apple.laf.AquaLookAndFeel
总是留下足够的宽度来拖动setMinWidth(0)
,尽管可以手动将列强制为零宽度。
答案 3 :(得分: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)
}
列将变为可见。