我使用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();但它没有用。
在第一张图片中,表格初始化时添加了两列。当我点击日期时,上面的代码片段会执行。请记住,这是一个调度系统,作为一个例子,我目前在系统中有两名员工。
在第三张图片中,我选择了一个没有员工参与日程安排的日期,因此没有要添加的列。如图所示,代码片段的第一部分工作正常,删除了列,唯一需要的第一列显示时间值。
在第四张图片中,我选择了两个员工都在工作的日期。现在不仅最后两列返回我假定被删除的列,而且还执行上面代码片段的第二部分,并向表中添加两列。
答案 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列索引。
我不能说我理解你的要求,所以我不能只给出具体的代码一般建议。