You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现点击按钮将JTable行单元格值复制到另一个JTable

问题根因

你的代码存在3个逻辑错误,直接导致行重复、值错位:

  • 行数变量mainTRow定义在按钮点击监听器外部,只会在界面初始化时赋值一次,后续mainTable新增/删除行时这个变量不会更新,点击按钮时取到的不是主表实时行数。
  • 循环内部重复执行mdl1.setRowCount(mainTRow)属于无效冗余操作,且在设置目标表固定行数后又调用addRow()方法——addRow()的逻辑是在表格现有行的末尾追加新行,每循环1次就多追加1行,直接导致目标表行数翻倍、重复添加行。
  • 同一次循环中同时使用addRow()和setValueAt()对同一列赋值,属于重复操作,还会因为addRow()改变行的实际索引,导致单元格值重复、错位。
修正后代码

直接替换原有按钮事件逻辑即可:

JButton totBTN = new JButton("Total");
totBTN.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        DefaultTableModel mainModel = (DefaultTableModel)mainTable.getModel();
        DefaultTableModel showModel = (DefaultTableModel)showTable.getModel();
        // 每次点击时获取主表实时行数,先清空目标表原有旧数据
        int realRowCount = mainModel.getRowCount();
        showModel.setRowCount(0);
        // 逐行读取主表第一列值,追加到目标表,不需要重复设置行数、重复赋值
        for(int i = 0; i < realRowCount; i++) {
            showModel.addRow(new Object[] {mainModel.getValueAt(i, 0)});
        }
    }
});
totBTN.setBounds(365, 341, 89, 23);
mainPanel.add(totBTN);

如果需要复制主表多列数据到目标表,只需要在addRow的Object数组中按列索引追加取值即可,例如要复制前3列就写成new Object[] {mainModel.getValueAt(i, 0), mainModel.getValueAt(i, 1), mainModel.getValueAt(i, 2)}。

内容的提问来源于stack exchange,提问作者muybien

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 11:27:15