将JTable中的行添加到另一个JTable中

时间:2014-04-18 16:26:33

标签: java arrays swing jtable

我正在进行项目的最后一部分,这是我遇到的最后一个问题。这部分用于编辑预订,即更改为特定预订预订的房间。 我有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());
        }   
    }
}

1 个答案:

答案 0 :(得分:1)

  

但我认为我没有刷新2D阵列。

您不应该访问2D阵列。该数组应仅用于最初将数据加载到表模型中。然后,您可以将Array变量设置为null,这样您就不会再次使用它了。

之后,应使用addRow()的{​​{1}}和removeRow()方法直接在TableModel上完成所有更新。

您还需要使用TableModel的DefaultTableModel方法从模型中获取数据,这样您就可以创建行数据的Vector(或数组)并将addRow()方法与数据一起使用