删除数据库中的项目后刷新jtable

时间:2014-02-15 10:00:09

标签: java swing jtable refresh

从jtable自动刷新中删除项目无效...

这是代码

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == btnEdit) {


        } else if (e.getSource() == btnDelete) {

            String str = JOptionPane.showInputDialog(null,
                    "Enter The Reason : ", "", 1);


            if (str != null) {
                Book updatebook = new Book();
                updatebook.setName(book.getName());                           
                updatebook.setAuthor(book.getAuthor());
                updatebook.setPublisher(book.getPublisher());
                updatebook.setDelete(true);
                ServiceFactory.getBookServiceImpl().updateBook(updatebook);

                JOptionPane.showMessageDialog(null, "You entered the Reason   : "+ str, "", 1);

        **Refresh code**

                listPanel.removeAll();
                listPanel.repaint();
                listPanel.revalidate();
                getBooks();
                getListBookPanel();
                booktable.repaint();
                booktable.revalidate();


            } else
                JOptionPane.showMessageDialog(null,
                        "You pressed cancel button.", "", 1);

        }
    }

getBooks()函数

public  JTable getBooks() {
    booktable = new JTable();

    String[] colName = {  "Name",  "Author ",
            "Publisher" };
    List<Book> books = ServiceFactory.getBookServiceImpl().findAllBook();
    data = new Object[books.size()][100000];

    for (Book book : books) {

        data[i][0] = book.getName();
        data[i][1] = book.getAuthor();
        data[i][2] = book.getPublisher();
        i++;
    }
 DefaultTableModel dtm = new DefaultTableModel(data, colName);
    booktable = new JTable();
    booktable.setModel(dtm);

    dtm.fireTableDataChanged();
    booktable.setCellSelectionEnabled(true);
    booktable.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {

            int row = booktable.getSelectedRow();
            CallNo = (booktable.getValueAt(row, 0).toString());

        }
    });

    return booktable;

}

错误

“AWT-EventQueue-0”java.lang.ArrayIndexOutOfBoundsException:2

我不知道为什么会出现这个错误,如果你知道这个,请在​​这里分享..

1 个答案:

答案 0 :(得分:2)

您尝试删除数据的方式似乎效率低下且不正确。看起来您要对代码执行的操作是创建一个完整的其他表并将其替换为新表。不要那样做。只需更新TableModel即可。你可以使用它的方法

只需使用此方法,就会自动从表中删除一行。所以你可以在听众的某个地方做这样的事情

DefaultTableModel model = (DefaultTableModel)bookTable.getModel();
int row = ...
model.removeRow(row);

您所拥有的所有代码**Refresh code**看起来都是不必要的。

查看DefualtTableModel了解更多方法,例如添加行等。