如何隐藏 DefaultTableModel 中的特定列以使其在表中显示?

Posted

技术标签:

【中文标题】如何隐藏 DefaultTableModel 中的特定列以使其在表中显示?【英文标题】:How to hide a particlar column in DefaultTableModel from displaying it in table? 【发布时间】:2012-08-25 03:04:30 【问题描述】:

我正在使用 Java Swingx 框架。我的 DefaultTableModel 对象中有 4 列。我希望只显示 3 列。但是,我需要全部四个来进行计算。

实际数据模型

S.No. | ID | GDC ID | Decsription

我想在表格中显示的内容

S.No.| GDC ID | Decsription

是否可以仅隐藏或省略一列渲染?请指导我。

【问题讨论】:

How to make a columns in JTable Invisible for Swing Java的可能重复 【参考方案1】:

您可以通过将其宽度设置为 0 来隐藏它。

_table.getColumn("ID").setPreferredWidth(0);
_table.getColumn("ID").setMinWidth(0);
_table.getColumn("ID").setWidth(0);
_table.getColumn("ID").setMaxWidth(0);

【讨论】:

内置功能可以“隐藏”视图中的列,这比干预大小要好【参考方案2】:

您操纵 getValueAt 、 getColumnCount 来实现这一点。

例如,你给它的 getColumnCount 为 3

在 getValueAt 上 - 如果列索引高于跳过的列,则跳过

JTable 将首先调用 getColumnCount 和 getRowCount 并为每个单元格获取调用 getValueAt。

注意:忽略此内容,请参阅下面的垃圾神链接。

【讨论】:

对,JTable 视图只显示TableModel 提供的内容;另见alternative。 您不应为此触摸/更改TableModel,因为JTable 已内置此功能。请参阅我的答案或@trashgod 链接。如果您要进行模型修改,我建议使用装饰器 @Robin - 同意 - 我认为这是一个更好的解决方案。 @Robin:是的,我忽略了DefaultTableModel 的使用。在这种情况下,您和 mKorbel 的答案可能会更容易。我通常在AbstractTableModel 的子类中使用 Sid 的方法。根据使用情况,brainless 可能还想考虑这个选项。【参考方案3】:

默认最小尺寸为10 pixels widht,

you can to remove / add column from JTable view, column presents in the XxxTableModel,您可以隐藏和显示任何列

【讨论】:

【参考方案4】:

无需调整您的模型,或尝试使该列非常小。 JTable 为此具有内置功能:removeColumn 方法。如该方法的javadoc中所述

从此 JTable 的列数组中删除 aColumn。注意:此方法不会从模型中删除数据列;它只是删除了负责显示它的 TableColumn。

还要注意以下方法的存在:

JTable#convertColumnIndexToModel JTable#convertColumnIndexToView

由于视图中的列顺序和列数(JTable)可能与模型中的不同,您需要这些方法在视图和模型之间切换

【讨论】:

【参考方案5】:

试试这个来删除单个列:

myTableModel = new DefaultTableModel();
myTableModel.setColumnIdentifiers(new Object[]"S.No.", "ID", "GDC ID", "Decsription");
JTable myTable = new JTable(myTableModel);

// remember to save the references
TableColumn myTableColumn0 = guiLoteryNumbersTable.getColumnModel().getColumn(0);
TableColumn myTableColumn1 = guiLoteryNumbersTable.getColumnModel().getColumn(1);
TableColumn myTableColumn2 = guiLoteryNumbersTable.getColumnModel().getColumn(2);
TableColumn myTableColumn3 = guiLoteryNumbersTable.getColumnModel().getColumn(3);

myTable.getColumnModel().removeColumn(myTableColumn1);

然后以保持顺序再次显示该列:

// 1- remove all the existent columns
myTable.getColumnModel().removeColumn(myTableColumn0);
myTable.getColumnModel().removeColumn(myTableColumn2);
myTable.getColumnModel().removeColumn(myTableColumn3);

// 2- add all the columns again in the right order
myTable.getColumnModel().addColumn(myTableColumn0);
myTable.getColumnModel().addColumn(myTableColumn1);
myTable.getColumnModel().addColumn(myTableColumn2);
myTable.getColumnModel().addColumn(myTableColumn3);

抱歉,这是我所知道的最好的方式。

【讨论】:

以上是关于如何隐藏 DefaultTableModel 中的特定列以使其在表中显示?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 defaulttablemodel 上添加行

JAVA--DefaultTableModel内容清零

如何在 DefaultTableModel/JTable 中合并单元格?

Java Swing 如何使用DefaultTableModel交替刷新JTable?

应该在哪里定义我的可选 DefaultTableModel 方法?

DefaultTableModel 不刷新