6

我不知道该怎么做。我正在创建一个应用程序。我需要使用表格,所以我使用的是 JTable。但我有很多问题。它似乎有效,但是当我尝试删除列时,该列消失(仅在 GUI 中),但所有信息仍然存在。列数也不会改变。
我已经搜索并尝试了很多不同的代码,但没有任何改变。

 public void addTblCol(JTable table,String name) {
    DefaultTableModel model = (DefaultTableModel)table.getModel();
     TableColumn col = new TableColumn(model.getColumnCount());

    col.setHeaderValue(name);
    table.addColumn(col);
    model.addColumn(name);
    this.realColCnt++;
      };
public void delTblCol(JTable table,int index) {
            DefaultTableModel model = (DefaultTableModel)table.getModel();
          TableColumn col = table.getColumnModel().getColumn(index);
    table.removeColumn(col);
    table.revalidate();
    this.realColCnt--;
      };
4

4 回答 4

9

DefaultTableModel支持一种setColumnCount()有效地允许您仅从模型末尾删除列的方法。

如果要从模型中间删除列,则需要:

  1. 扩展DefaultTableModel并创建自己的removeColumn(int column)方法。
  2. 此方法需要遍历 Vector 中的每一行,并使用该Vector.remove(int)方法为每一行删除列。
  3. 最后,完成此操作后,您将需要调用该fireTableStructureChanged()方法来告诉表已删除列,以便可以重新绘制表。
于 2013-11-03T21:53:37.407 回答
4

与您的问题相关的一些一般信息。

JTable APIpublic void removeColumn(TableColumn aColumn)明确指出:

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

所以你正在经历的行为是可以预料的。如果您尝试从模型中删除数据,那么您将不得不更改 TableModel 的数据和 ColumnModel。再次获得更具体的帮助,您需要告诉我们更多信息。

考虑创建一个自定义表模型并为其提供一个removeColumn(...)从单个列中删除所有数据的方法,然后调用适当的fireXXX(...)方法。


编辑
您在评论中声明:

谢谢回答,我是新手。这个 prog 非常适合学习,我浪费了两天时间来创建它。现在又遇到了问题。最简单的方法是什么?

这一切都取决于你想做什么。如果您只想更改显示,请照常删除该列并保留数据。

于 2013-11-03T20:58:45.230 回答
2

基于camickr 的解决方案,我将这段代码写到removeJTable.

public class CustomTableModel extends DefaultTableModel {
    public void removeColumn(int column) {
        // for each row, remove the column
        Vector rows = dataVector;
        for (Object row : rows) {
            ((Vector) row).remove(column);
        }

        // remove the header
        columnIdentifiers.remove(column);

        // notify
        fireTableStructureChanged();
    }
}

请注意,它不会检查列是否可以删除。

于 2017-05-16T20:02:16.477 回答
2
jTable1.removeColumn(jTable1.getColumnModel().getColumn(0));
  1. 将 jTable1 替换为您的表名。
  2. 根据您的表格更改“getColumn(0)”内的索引号。
于 2018-04-12T18:32:45.577 回答