Prasanth A R
Prasanth A R

Reputation: 4174

Refresh jtable after Delete An item from database

Delete an item from jtable auto refresh is not working...

here is the code

    @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() function

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;

}

Error

"AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2

i don't know why this error occured if u knew about this please share here..

Upvotes: 0

Views: 1334

Answers (1)

Paul Samsotha
Paul Samsotha

Reputation: 208944

The way you're attempting to remove data seems vary inefficient and just incorrect. It looks like what you are trying to do with your code is create a whole other table and replacing it with a new one. Don't do that. Just update the TableModel. You can just use its method

Just using this method, will automatically remove a row from the table. So you can just do something like this, somewhere in a listener

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

All you code where you have **Refresh code** looks simply unnecessary.

Look at DefualtTableModel for more methods, like adding rows and such.

Upvotes: 1

Related Questions