如何在JTable java中插入/删除列

时间:2013-11-03 20:55:02

标签: java swing jtable

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

 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 个答案:

答案 0 :(得分:6)

DefaultTableModel支持setColumnCount()方法,该方法实际上只允许您从模型末尾删除列。

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

  1. 扩展DefaultTableModel并创建自己的removeColumn(int column)方法。
  2. 此方法需要循环遍历Vector中的每一行,并使用Vector.remove(int)方法删除行的列。
  3. 最后一旦完成,您需要调用fireTableStructureChanged()方法告诉表已删除列,以便重新绘制表。

答案 1 :(得分:3)

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

public void removeColumn(TableColumn aColumn)的{​​{3}}明确指出:

  

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

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

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


修改
您在评论中说明:

  

THx的答案,我是新手。这个编程是为了研究我已经浪费了两天来创建它。现在再次有问题。什么是最简单的方法?

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

答案 2 :(得分:0)

根据camickr's solution,我将此代码写入remove的{​​{1}}列。{/ p>

JTable

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

答案 3 :(得分:0)

jTable1.removeColumn(jTable1.getColumnModel().getColumn(0));
  1. 用您的表名替换jTable1。
  2. 更改内部" getColumn(0)"根据你的表格。