java - 为什么删除后刷新JTable不起作用

标签 java swing

我有 JTable,可以在其中更新和删除行。我的问题是,当我想打印记录表时会刷新,但当我删除/更新时却不会。

PrisonerEvent 包含要在数据库中删除的数据。这没有问题。这是我的听众:

class DeletePrisonerListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {        

            int row = getSelectedRow();
            PrisonerEvent evt = getPrisonerEvent();
            String message = "Are you sure you want to delete this prisoner?";
            int option = JOptionPane.showOptionDialog(null, message, "Confirm", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null);

            if(option == JOptionPane.OK_OPTION) {
                prisonerController.removePrisoner(evt.getId());
            }

            tablePanel.getTableModel().fireTableDataChanged();          
        }           
    } 

这是我的 TableModel

public class PrisonerTableModel extends AbstractTableModel {

private List<Prisoner> db;
private String[] colNames = { "Name", "Surname", "Date of birth", "Height", "Eye color", "Hair color",
            "Country of origin", "Gender"};

public PrisonerTableModel(){
}

public String getColumnName(int column) {
    return colNames[column];
}

public void setData(List<Prisoner> db) {
    this.db = db;
}

public int getColumnCount() {
    return 8;
}

public int getRowCount() {
    return db.size();
}

public Object getValueAt(int row, int col) {
    Prisoner prisoner = db.get(row);

    switch(col) {
    case 0:
        return prisoner.getName();
    case 1:
        return prisoner.getSurname();
    case 2:
        return prisoner.getBirth();
    case 3:
        return prisoner.getHeight();
    case 4:
        return prisoner.getEyeColor();
    case 5:
        return prisoner.getHairColor();
    case 6:
        return prisoner.getCountry();
    case 7:
        return prisoner.getGender();

    }

    return null;
}

}

最佳答案

您的 PrisonerTableModel 没有从 TableModel 中删除一行数据的方法。如果要从表中删除数据,则需要从 TableModel 中删除数据。然后 TableModel 将调用 fireTableRowsDeleted(...) 方法。您的应用程序代码永远不应该调用 TableModel 的 fireXXX(...) 方法。

删除一行数据的基本逻辑如下:

public void removePrisoner(int row)
{
    db.remove(row);
    fireTableRowsDeleted(row, row);
}

查看Row Table Model有关如何更好地实现 TableModel 中的逻辑的更完整示例。

关于java - 为什么删除后刷新JTable不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34661950/

相关文章:

java - 特殊字符会自动从请求中删除

java - 更改 JTable 特定单元格中的字体颜色?

java - HTTP Keep-Alive 可以维持长轮询吗?

java - 如何将 fragment 设置为 BottomNavigation 的默认 fragment ?

java - 查询所有联系人的搜索

java - 如何从 Java SSLSocket 访问最终协商的协议(protocol)和密码?

java - 加载 .jpeg 并设置为 JLabel?

java - 将信息从文件移至 ArrayList

java swing清空事件队列

java 2D 绘图