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

Java Swing点击选择按钮后数据未显示在目标表格的问题

问题:点击“选择”按钮后数据未显示在目标表格中

我编写了btnPilihActionPerformed()方法处理“选择”按钮的点击事件,尝试从三个表格的选中行获取数据,再通过loadData()方法将数据插入到另一表格中。但点击按钮后,目标表格并未显示数据,以下是我的代码片段:

private void btnPilihActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    String id, nama, harga;
    int tabelDipilih = -1; // -1 表示未选中任何表格

    int i = jTable1.getSelectedRow();
    int f = jTable2.getSelectedRow();
    int g = jTable3.getSelectedRow();

    if (i >= 0) {
        tabelDipilih = 1; // 选中jTable1
    } else if (f >= 0) {
        tabelDipilih = 2; // 选中jTable2
    } else if (g >= 0){
        tabelDipilih = 3; // 选中jTable3
    }

    try {
        switch (tabelDipilih) { // 根据选中的表格执行逻辑
            case 1: // 从jTable1获取数据
                id = jTable1.getValueAt(i, 0).toString();
                nama = jTable1.getValueAt(i, 1).toString();
                harga = jTable1.getValueAt(i, 4).toString();
                loadData();
                break;
            case 2: // 从jTable2获取数据
                id = jTable2.getValueAt(f, 0).toString();
                nama = jTable2.getValueAt(f, 1).toString();
                harga = jTable2.getValueAt(f, 4).toString();
                loadData();
                break;
            case 3: // 从jTable3获取数据
                id = jTable3.getValueAt(g, 0).toString();
                nama = jTable3.getValueAt(g, 1).toString();
                harga = jTable3.getValueAt(g, 4).toString();
                loadData();
                break;
            default:
                // 处理未选中的情况(比如弹出提示)
        }
    } catch (Exception e)  {
        JOptionPane.showMessageDialog(null, "Gagal mengambil data menu. Silahkan coba lagi.");
        return;
    }                                        
    dispose();
}

问题分析与修复方案

核心问题

你已经成功从选中行获取了id、nama、harga的值,但没有将这些数据传递给loadData()方法。loadData()完全不知道要插入什么内容,自然无法更新目标表格。

修复步骤

  1. 修改loadData()方法,添加参数接收数据
    把loadData()改成带参数的方法,让它能接收你获取到的三个值:

    private void loadData(String id, String nama, String harga) {
        // 这里实现向目标表格插入数据的逻辑
        // 示例(假设目标表格是targetTable,使用DefaultTableModel):
        DefaultTableModel targetModel = (DefaultTableModel) targetTable.getModel();
        targetModel.addRow(new Object[]{id, nama, harga});
    }
    
  2. 调用loadData()时传入数据
    在每个case分支里,调用loadData()时把获取到的变量传进去:

    // 以case 1为例,其他分支同理
    case 1:
        id = jTable1.getValueAt(i, 0).toString();
        nama = jTable1.getValueAt(i, 1).toString();
        harga = jTable1.getValueAt(i, 4).toString();
        loadData(id, nama, harga); // 传入数据
        break;
    
  3. 完善未选中的提示逻辑
    在default分支里添加提示,避免用户点击按钮后无反馈:

    default:
        JOptionPane.showMessageDialog(null, "请先选中任意一行数据");
        break;
    
  4. 检查loadData()的内部逻辑

    • 确认目标表格的TableModel类型是否正确(比如DefaultTableModel)
    • 确保插入数据后,TableModel能自动触发表格刷新(DefaultTableModel的addRow()方法会自动触发)
    • 如果目标表格使用了自定义TableModel,要确保实现了数据添加和通知视图刷新的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:44:59