【发布时间】:2014-09-23 00:09:39
【问题描述】:
我想隐藏 Jtable 的一列数据,但不隐藏列视图,只隐藏它的数据。 该列包含有关利润的数据,客户不想显示利润,但在我的代码中,我使用此列的值并在用户选择指定行时获取它。
如何实现客户需求,并且在隐藏数据后选择该列时仍然能够获取该列的值(显示列为空但仍有其值)?
【问题讨论】:
我想隐藏 Jtable 的一列数据,但不隐藏列视图,只隐藏它的数据。 该列包含有关利润的数据,客户不想显示利润,但在我的代码中,我使用此列的值并在用户选择指定行时获取它。
如何实现客户需求,并且在隐藏数据后选择该列时仍然能够获取该列的值(显示列为空但仍有其值)?
【问题讨论】:
您需要从JTable 的TableColumnModel 中删除TableColumn。例如:
table.removeColumn( table.getColumn(...) );
现在该列将不会显示在表格中,但数据仍可在TableModel 中找到。访问您使用的数据:
table.getModel().getValueAt(...);
【讨论】:
您可以尝试子类化DefaultTableCellRenderer,然后调用setCellRenderer。当相关列号传递给getTableCellRendererComponent时,返回空白JLabel,否则调用默认的super.getTableCellRendererComponent。
这应该意味着该列仍然可见,但每个单元格都是空白的。
如果要在选择行时显示数据,则需要向选择模型(来自getSelectionModel)添加一个侦听器以将所选行存储在变量中,并调用重绘。然后,您可以在 CellRenderer 中使用此值。
【讨论】:
为什么不让 dataModel 控制显示的内容?我假设您使用的是 tableModel。
您所要做的就是更改 getValueAt(..) 方法,使其不会为您不想显示的列返回值。确保 getColumnCount() 方法也减一。
【讨论】:
Why don't you just let the dataModel control what is shown? 模型保存数据。视图控制数据的显示方式。所以任何改变都应该改变视图,而不是模型。这是 Swing 的 MVC 设计的基础。 All you have to do is change the getValueAt(..) method so that it does not return a value 那么无论您是尝试渲染表中的数据,还是仅通过应用程序中的其他代码访问数据,这都是您得到的结果。
and only ever want to show name, address, but not telephone, then I would just have the getValueAt() return 'name' and 'address' - 一般来说我会同意,但要求是“电话”需要用于应用程序中的其他处理。