首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java Swing 兩個 JTable 間數據移動:正確更新模型避免覆蓋

     編輯:程式設計疑難解答

問題現象

點擊「→」將左表選中行移至右表,但右表數據被覆蓋,只保留最後一行。

原因

代碼中 `rowData` 為同一 `Vector` 引用,反覆 `add` 導致所有行指向同一對象,且 `data.add(rowData)` 重複添加同一引用。

修正:每行創建新 Vector

btnNewButton.addActionListener(e -> {
    // 1. 獲取左表選中行數據
    int[] selected = leftTable.getSelectedRows();
    DefaultTableModel rightModel = (DefaultTableModel) rightTable.getModel();
    
    for (int idx : selected) {
        Vector row = new Vector(); // 關鍵:新建行向量
        for (int col = 0; col < leftTable.getColumnCount(); col++) {
            row.add(leftTable.getValueAt(idx, col));
        }
        rightModel.addRow(row);
    }
    // 可選:從左表刪除(逆序刪除避免索引偏移)
    for (int i = selected.length - 1; i >= 0; i--) {
        ((DefaultTableModel)leftTable.getModel()).removeRow(selected[i]);
    }
});

關鍵點

  • 每行 `new Vector()` 確保獨立對象。
  • 直接操作 `DefaultTableModel`,`JTable` 自動刷新。
  • 刪除源表行時逆序遍歷索引。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved