cam*_*ckr 62
TableColumn
从中取出TableColumnModel
.
TableColumnModel tcm = table.getColumnModel();
tcm.removeColumn( tcm.getColumn(...) );
Run Code Online (Sandbox Code Playgroud)
如果您需要访问数据,那么您可以使用table.getModel().getValueAt(...)
.
对于允许用户根据需要隐藏/显示列的更复杂的解决方案,请查看表列管理器.
zaw*_*tut 35
首先从视图中删除列
table.removeColumn(table.getColumnModel().getColumn(4));
Run Code Online (Sandbox Code Playgroud)
然后从模型中检索数据.
table.getModel().getValueAt(table.getSelectedRow(),4);
Run Code Online (Sandbox Code Playgroud)
需要注意的一点是,在检索数据时,必须从模型中检索而不是从表中检索数据.
Mr.*_*mon 17
我尝试了两种可行的解决方案,但都解决了第一种解决方案.
table.removeColumn(table.getColumnModel().getColumn(4));
Run Code Online (Sandbox Code Playgroud)
要么
table.getColumnModel().getColumn(4).setMinWidth(0);
table.getColumnModel().getColumn(4).setMaxWidth(0);
table.getColumnModel().getColumn(4).setWidth(0);
Run Code Online (Sandbox Code Playgroud)
在我最近的案例中,我更喜欢第二种解决方案,因为我添加了一个TableRowSorter.
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
table.setRowSorter(sorter);
Run Code Online (Sandbox Code Playgroud)
使用时table.removeColumn(table.getColumnModel().getColumn(4))
,它将从视图/表中物理删除列,因此您无法使用table.getValueAt(row, 4)
- 它返回ArrayIndexOutOfBounds
.获取已删除列的值的唯一方法是调用table.getModel().getValueAt(table.getSelectedRow(),4)
.由于TableRowSorter只对表中的内容进行排序,而不对DefaultTableModel对象中的数据进行排序,因此问题是在对记录进行排序后获取值时- 它将从DefaultModelObject中检索未排序的数据.
所以我使用了第二种解决方案然后使用 table.getValueAt(table.getSelectedRow(),4);
我看到第二种方法的唯一问题是@camickr提到:"当你将宽度设置为0时,尝试使用Tab键,当你点击隐藏列时,焦点会消失,直到你再次选中.这会让用户感到困惑."
我有同样的问题,因为我使用TableColumnModel
removColumn();
的确没有帮助我所以我用这个
table.getColumnModel().getColumn(0).setWidth(0);
table.getColumnModel().getColumn(0).setMinWidth(0);
table.getColumnModel().getColumn(0).setMaxWidth(0);
Run Code Online (Sandbox Code Playgroud)
并且对我来说很好,它隐藏了第0列,我仍然可以从中获得价值
将最小、最大和“正常”宽度设置为 0:
jTable.getColumn("ABC").setMinWidth(0); // Must be set before maxWidth!!
jTable.getColumn("ABC").setMaxWidth(0);
jTable.getColumn("ABC").setWidth(0);
Run Code Online (Sandbox Code Playgroud)
注意:由于您不能设置maxWidth
< minWidth
,您需要先更改minWidth
,(javadoc)。也是如此width
。
第二种方法是扩展TableColumnModel
和覆盖所有方法以创建模型没有这两列的错觉(对于 JTable)。
所以当你隐藏一列时,你必须在表询问列数时少返回一个,当它询问列X时,你可能要在列索引上加+1(取决于是否在左边)或隐藏列的右侧)等。
让您的新表模型将所有方法调用(带有更正的索引等)转发到实际列模型,并在 JTable 中使用新表模型。