有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java“刷新”JTable中的数据

我正在制作一个GUI,它包括一个JPanel,在这个JPanel中有一个JTable,我想做的是:当我单击一个按钮时,它们都会出现(因为我使用的是CardLayout)。代码:

    private void teGjithaButtonActionPerformed(java.awt.event.ActionEvent evt) {                                               
    try {
        parentPanel.setVisible(true);
        parentPanel.removeAll();
        parentPanel.add(tgjPanel);
        parentPanel.repaint();
        parentPanel.revalidate();
        listAllCurtains();
    } catch (SQLException ex) {
        Logger.getLogger(MainBrillant.class.getName()).log(Level.SEVERE, null, ex);
    }
}  

以及listallveets()的代码:

 DefaultTableModel deftm = (DefaultTableModel) allTable.getModel();

    if (deftm.getRowCount() != 0) {
        deftm.setRowCount(0);
    }

    stm = (Statement) conn.createStatement();
    ResultSet rs = stm.executeQuery("select * from customerregister.curtain inner join curtainrel on curtain.code = curtainrel.curtainCode;");
    while (rs.next()) {
        String shifra = rs.getString("code");
        String ngjyra = rs.getString("color");
        String emri = rs.getString("name");
        double cmimi = rs.getDouble("price");
        double sasia = rs.getDouble("amount");
        allCurtains.add(new Curtain(shifra, ngjyra, emri, cmimi, sasia));
    }

    Object[] row = new Object[5];
    for (int i = 0; i < allCurtains.size(); i++) {
        row[0] = allCurtains.get(i).getShifra();
        row[1] = allCurtains.get(i).getEmri();
        row[2] = allCurtains.get(i).getNgjyra();
        row[3] = allCurtains.get(i).getCmimi();
        row[4] = allCurtains.get(i).getSasia();
        deftm.addRow(row);
    }

}

问题是,当我重新单击按钮时,尽管代码中有这一部分可以确保数据不重复:

if (deftm.getRowCount() != 0) {
        deftm.setRowCount(0);
    }

每次单击按钮时,它仍然会继续将相同的数据插入表中。我不明白为什么会这样,我非常感谢你的帮助


共 (1) 个答案

  1. # 1 楼答案

    也许您应该在决定再次重新发布数据之前清除JTable模型中的行。而不是您的:

    if (deftm.getRowCount() != 0) {
        deftm.setRowCount(0);
    }
    

    代码,可能使用一个简单的clearTable()方法,如:

    private void clearJTable(DefaultTableModel yourTableModel) {
        while (yourTableModel.getRowCount() > 0) {
            for (int i = 0; i < yourTableModel.getRowCount(); i++) {
                yourTableModel.removeRow(i);
            }
        }
    }
    

    然后在代码中:

    DefaultTableModel deftm = (DefaultTableModel) allTable.getModel();
    
        clearJTable(deftm);
    
        stm = (Statement) conn.createStatement();
        ResultSet rs = stm.executeQuery("select * from customerregister.curtain inner join curtainrel on curtain.code = curtainrel.curtainCode;");
        while (rs.next()) {
            String shifra = rs.getString("code");
            String ngjyra = rs.getString("color");
            String emri = rs.getString("name");
            double cmimi = rs.getDouble("price");
            ....................................
            ....................................
            ....................................