【问题标题】:How to hide the Jtable column data?如何隐藏Jtable列数据?
【发布时间】:2014-09-23 00:09:39
【问题描述】:

我想隐藏 Jtable 的一列数据,但不隐藏列视图,只隐藏它的数据。 该列包含有关利润的数据,客户不想显示利润,但在我的代码中,我使用此列的值并在用户选择指定行时获取它。

如何实现客户需求,并且在隐藏数据后选择该列时仍然能够获取该列的值(显示列为空但仍有其值)?

【问题讨论】:

    标签: java swing jtable


    【解决方案1】:

    您需要从JTableTableColumnModel 中删除TableColumn。例如:

    table.removeColumn( table.getColumn(...) );
    

    现在该列将不会显示在表格中,但数据仍可在TableModel 中找到。访问您使用的数据:

    table.getModel().getValueAt(...);
    

    【讨论】:

    • 从你所说的我得出的结论是“table.removeColumn(table.getColumn(...));”将从视图中删除该列,并且您说“访问您使用的数据:table.getModel().getValueAt(...); 我可以通过此代码获取隐藏列中单元格的值,尽管它不是可见,例如假设隐藏列在索引 3 中,我想获取 (2,3) 处的值,尽管此单元格不可见,但我能得到它吗,我希望它很清楚
    【解决方案2】:

    您可以尝试子类化DefaultTableCellRenderer,然后调用setCellRenderer。当相关列号传递给getTableCellRendererComponent时,返回空白JLabel,否则调用默认的super.getTableCellRendererComponent

    这应该意味着该列仍然可见,但每个单元格都是空白的。

    如果要在选择行时显示数据,则需要向选择模型(来自getSelectionModel)添加一个侦听器以将所选行存储在变量中,并调用重绘。然后,您可以在 CellRenderer 中使用此值。

    【讨论】:

      【解决方案3】:

      为什么不让 dataModel 控制显示的内容?我假设您使用的是 tableModel。

      您所要做的就是更改 getValueAt(..) 方法,使其不会为您不想显示的列返回值。确保 getColumnCount() 方法也减一。

      【讨论】:

      • -1, 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 那么无论您是尝试渲染表中的数据,还是仅通过应用程序中的其他代码访问数据,这都是您得到的结果。
      • 是的,模型保存“什么”数据,视图控制“如何”。对我来说,这是一个“什么”而不是“如何”的问题。如果我有一个客户实体,并且只想显示姓名、地址而不是电话,那么我只会让 getValueAt() 返回“姓名”和“地址”。对我来说,渲染器处理数据的视觉表示。
      • and only ever want to show name, address, but not telephone, then I would just have the getValueAt() return 'name' and 'address' - 一般来说我会同意,但要求是“电话”需要用于应用程序中的其他处理。
      猜你喜欢
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 2019-06-13
      • 2012-12-08
      • 2016-03-15
      • 2012-08-31
      • 2012-02-18
      • 1970-01-01
      相关资源
      最近更新 更多