删除Jtable上的列,而不是插入新列

时间:2015-05-19 00:27:05

标签: java swing netbeans jtable

我使用Netbeans开发java应用程序。我试图删除jTable上的列,而不是使用我正在提取的数据向其中添加新列。问题是,我可以使用下面的代码片段轻松删除列。但是当我添加新列时,我删除的旧列返回。真的很感激任何帮助。

下面的代码片段用于事件处理程序,我使用日期选择器选择日期。

    d = jXDatePicker1.getDate();
    int i=jTable1.getColumnCount();
    if(i>1){
    for (;i > 1;i--) {
                TableColumn colToDelete = jTable1.getColumnModel().getColumn(jTable1.getColumnCount() - 1);
                jTable1.removeColumn(colToDelete);
                jTable1.validate();
    }

上面的代码从jTable1中删除了列。

    }
    emp1 = ControllerClass.searchEmpAvalibility(String.valueOf(d.getDay()));
    DefaultTableModel model=(DefaultTableModel)jTable1.getModel();
    for (Employee e : emp1) {
        if (e != null) {

           model.addColumn(e.getEmployeeId() + "," + e.getFirstName() + " " + e.getLastName());

        }
    }

现在我想为员工添加一个带有新列的额外列。不幸的是,当我添加一列时,我之前删除的列会返回。我甚至有trien model.fireTableDataChange();但它没有用。

enter image description here enter image description here enter image description here enter image description here

在第一张图片中,表格初始化时添加了两列。当我点击日期时,上面的代码片段会执行。请记住,这是一个调度系统,作为一个例子,我目前在系统中有两名员工。

在第三张图片中,我选择了一个没有员工参与日程安排的日期,因此没有要添加的列。如图所示,代码片段的第一部分工作正常,删除了列,唯一需要的第一列显示时间值。

在第四张图片中,我选择了两个员工都在工作的日期。现在不仅最后两列返回我假定被删除的列,而且还执行上面代码片段的第二部分,并向表中添加两列。

1 个答案:

答案 0 :(得分:1)

jTable1.removeColumn(colToDelete);

该方法只是从JTable视图中删除列。数据仍包含在TableModel中。

如果要从模型中删除数据,则DefaultTableModel支持setColumnCount()方法,但这只会从模型末尾的列中删除数据,这可能会或可能不会满足你的要求。

model.addColumn(e.getEmployeeId() + "," + e.getFirstName() + " " + e.getLastName

当您向模型添加列时,会生成fireTableStructureChanged()事件,该事件会导致JTable根据TableModel中的所有列重新创建TableColumnModel,因此您从视图中删除的列不会再次显示。

如果您不希望自动重新创建TableColumnModel,那么在您第一次使用时创建JTable之后:

table.setAutoCreateColumnsFromModel(false);

但是,现在您将负责使用JTable.addColumn(...)方法将新TableColumn添加到表中。在创建TableColumn时,不要忘记指定正确的TableModel列索引。

我不能说我理解你的要求,所以我不能只给出具体的代码一般建议。