我正在进行项目的最后一部分,这是我遇到的最后一个问题。这部分用于编辑预订,即更改为特定预订预订的房间。 我有2个JTable,一个有可用的房间,另一个房间已经预订了预订。两者都有单独的DefaultTable模型和2D对象数组。 我在两个表之间有一个添加和删除按钮,它在您选择的行上交换。
问题是它适用于第一次添加/删除,但我认为我没有刷新2D数组。在第二次尝试添加另一行时,模型仍然引用原始的2D数组,因为我没有从2D数组中删除该行,因此它给了我错误的行数据。
是否有更简单的方法使用JTable / model方法解决此问题,而不是创建临时2D对象数组以排除选定的行?
下面的示例代码显示ActionPerformed代码。
if(e.getSource().equals(addRow)){
System.out.println(tableLeft.getSelectedRow());
if(tableLeft.getSelectedRow() == -1){ //if no row selected
}
else{
model.insertRow(tableRight.getRowCount(),array2dLeft[tableLeft.getSelectedRow()]);
modelLeft.removeRow(tableLeft.getSelectedRow());
modelLeft.fireTableRowsDeleted(tableLeft.getSelectedRow(),tableLeft.getSelectedRow());
txtTotalCost.setText("€" + getTotalCost());
}
}
if(e.getSource().equals(removeRow)){
if(tableRight.getSelectedRow() == -1){ //if no row selected
}
else{
modelLeft.insertRow(tableLeft.getRowCount(),array2dLeft[tableRight.getSelectedRow()]);
model.removeRow(tableRight.getSelectedRow());
txtTotalCost.setText("€" + getTotalCost());
}
}
}
答案 0 :(得分:1)
但我认为我没有刷新2D阵列。
您不应该访问2D阵列。该数组应仅用于最初将数据加载到表模型中。然后,您可以将Array变量设置为null,这样您就不会再次使用它了。
之后,应使用addRow()
的{{1}}和removeRow()
方法直接在TableModel上完成所有更新。
您还需要使用TableModel的DefaultTableModel
方法从模型中获取数据,这样您就可以创建行数据的Vector(或数组)并将addRow()方法与数据一起使用