如何根据JComboBox中的选择显示/隐藏某些JTable列

时间:2012-10-20 11:23:15

标签: swing jtable hidden visible

我有JTableJComboBox。当我在组合框中选择一个项目时,我想要隐藏某些列,当我在组合框中选择其他项目时,我想要重新出现相同的隐藏列。我写,

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 个答案:

答案 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#removeColumnJTable#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)
}

列将变为可见。