Java 如何隐藏DefaultTableModel中的特殊列,使其不显示在表中?

Java 如何隐藏DefaultTableModel中的特殊列,使其不显示在表中?,java,swing,jtable,swingx,defaulttablemodel,Java,Swing,Jtable,Swingx,Defaulttablemodel,我正在使用JavaSwingx框架。我的DefaultTableModel对象中有4列。我只想显示其中的3列。但是,我需要这四个来进行计算 实际数据模型 S.No.|ID | GDC ID |说明 我想在表中显示的内容 S.No.| GDC ID |声明 是否可以在渲染中仅隐藏或忽略一列?请引导我。您可以通过将其宽度设置为0来隐藏它 _table.getColumn("ID").setPreferredWidth(0); _table.getColumn("ID").setMinWidth(0)

我正在使用JavaSwingx框架。我的
DefaultTableModel
对象中有4列。我只想显示其中的3列。但是,我需要这四个来进行计算

实际数据模型
S.No.|ID | GDC ID |说明

我想在表中显示的内容
S.No.| GDC ID |声明


是否可以在渲染中仅隐藏或忽略一列?请引导我。

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

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

您可以操作getValueAt、getColumnCount来实现这一点

例如,你给它的getColumnCount是3

和在getValueAt上-如果列索引位于跳过的列之上,则跳过

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

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

  • 默认情况下,最小尺寸为
    10像素
    widt

  • ,可以隐藏和显示任何列


    • 无需调整您的模型,也无需尝试使该列非常小
      JTable
      内置了以下功能:方法。正如该方法的javadoc中所述

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

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


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

      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);
      

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

      没错,
      JTable
      视图只显示
      TableModel
      提供的内容;另请参见此。您不应为此触摸/更改
      表格模型,因为
      JTable
      内置了此功能。请参阅我的答案或@trashgood链接。如果你想修改模型,我建议使用decorator@Robin-同意-我认为这是一个更好的解决方案。@罗宾:是的,我忽略了
      DefaultTableModel
      的使用。在这种情况下,你和mKorbel的回答可能会更容易。我通常在
      AbstractTableModel
      的子类中使用Sid的方法。根据使用情况,没有头脑的人可能还想考虑这个选项。有一个内置的功能来“隐藏”视图中的一个列,这是最好的。