Java 为什么刷新JTable不';删除后无法工作

Java 为什么刷新JTable不';删除后无法工作,java,swing,Java,Swing,我有一个JTable,可以在其中更新和删除行。我的问题是,当我想打印记录时,表会刷新,但当我删除/更新记录时,表不会刷新 PrisonEvent包含要在数据库中删除的数据。这没有问题。这是我的听众: class DeletePrisonerListener implements ActionListener { public void actionPerformed(ActionEvent e) { int row = getSelec

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

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

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();          
        }           
    } 
这是我的桌面模型

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;
}

}
公共类PrisoneTableModel扩展了AbstractTableModel{
私有列表数据库;
私有字符串[]colNames={“姓名”、“姓氏”、“出生日期”、“身高”、“眼睛颜色”、“头发颜色”,
“原籍国”、“性别”};
公共监狱模型(){
}
公共字符串getColumnName(int列){
返回colNames[列];
}
公共无效设置数据(列表数据库){
这个.db=db;
}
public int getColumnCount(){
返回8;
}
public int getRowCount(){
返回db.size();
}
公共对象getValueAt(整数行,整数列){
囚犯=db.get(世界其他地区);
开关(col){
案例0:
return container.getName();
案例1:
返回囚犯;
案例2:
返回囚犯;
案例3:
返回囚犯。getHeight();
案例4:
返回囚犯。getEyeColor();
案例5:
返回囚犯。getHairColor();
案例6:
返回囚犯。getCountry();
案例7:
返回囚犯。getGender();
}
返回null;
}
}

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

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

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

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

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

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

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

查看更多关于如何更好地在TableModel中实现逻辑的完整示例。

1)要更快获得更好的帮助,请发布或。2) 为什么要实现
AbstractTableModel
而不是扩展
DefaultTableModel
?问题可能出在表模型中。如何从
表模型中实际删除该行。2) 为什么要实现
AbstractTableModel
而不是扩展
DefaultTableModel
?问题可能出在表模型中。实际如何从
表模型中删除该行?