JTable隐藏和显示列

我想在表中添加一些列(Swing JTable)。 其中一些将具有默认大小(例如250),其他将被隐藏(因此它们的大小将为0)。 我用这个代码:

model = new DefaultTableModel(); table = new JTable(model); setAutoResizeMode(AUTO_RESIZE_OFF); for (int i = 1; i < COLUMN_NAMES.length; i++) { model.addColumn(COLUMN_NAMES[i]); if (show[i]) show(index); else hide(index); } ........ private void hide(int index) { TableColumn column = getColumnModel().getColumn(index); column.setMinWidth(0); column.setMaxWidth(0); column.setWidth(0); column.setPreferredWidth(0); doLayout(); } private void show(int index) { final int width = 250; column.setMinWidth(15); column.setMaxWidth(width); column.setWidth(width); column.setPreferredWidth(width); doLayout(); } 

问题是当显示表格时,显示所有列(没有隐藏),它们的大小不是250,但它们具有相同的大小。

我怎样才能得到想要的效果?

JTable #removeColumn仅从JTable视图中删除列,在此示例中更多

当您想要隐藏要设置的列时,我认为您已经错误地命名了您的方法

 column.setMinWidth(0); column.setMaxWidth(0); column.setPreferredWidth(0); 

但是在您的代码中,当您想要显示完全相反的列时,您正在执行此操作。

此外,无需在TableColumn上调用此“setWidth”方法,请阅读TableColumn#setWidth(int) 。

您可以考虑使用支持隐藏列的JXTable(在SwingX项目中 ),使用ui-control来允许用户动态隐藏/显示它们,以及其他一些有用的东西:)而不是重新发明轮子。

尝试这样的事情,例如:

 myTableModel = new DefaultTableModel(); myTableModel.setColumnIdentifiers(new Object[]{"ID", "Name"}); JTable myTable = new JTable(myTableModel); // remember to save the references TableColumn myTableColumn0 = guiLoteryNumbersTable.getColumnModel().getColumn(0); TableColumn myTableColumn1 = guiLoteryNumbersTable.getColumnModel().getColumn(1); //... // remove temporary the column ("hide") myTable.getColumnModel().removeColumn(myTableColumn1); // then you restore that column when you need it ("show") myTable.getColumnModel().addColumn(myTableColumn1); 

这是我知道隐藏列的最佳方式。

  HashMap hashMap_columns = new HashMap(); DefaultTableColumnModel defaultTableColumnModel = (DefaultTableColumnModel)jtable.getColumnModel(); Enumeration enumeration = defaultTableColumnModel.getColumns(); while (enumeration.hasMoreElements()) { TableColumn tableColumn = enumeration.nextElement(); hashMap_columns.put((String)tableColumn.getIdentifier(),tableColumn); } public void setColumnVisible(String identifier, boolean setVisible) { TableColumn tableColumn = hashMap_columns.get(identifier); if (setVisible) { // using a sorted map removes the need to check column index/position SortedMap sortedMap = new TreeMap(); // retreive all visible columns Enumeration enumeration = defaultTableColumnModel.getColumns(); while (enumeration.hasMoreElements()) { TableColumn column = enumeration.nextElement(); sortedMap.put(column.getModelIndex(),column); } // add the column of interest to the sorted map sortedMap.put(tableColumn.getModelIndex(),tableColumn); // remove all visible columns for (TableColumn column: sortedMap.values()) { defaultTableColumnModel.removeColumn(column); } // add all previously visible columns as well as the column of interest for (TableColumn column: sortedMap.values()) { defaultTableColumnModel.addColumn(column); } } else { defaultTableColumnModel.removeColumn(tableColumn); } }