Не создавайте новый JTable.
Все, что вам нужно сделать, это использовать:
model.setRowCount(0);
Это удалит все данные из модели.
TableModelListener по-прежнему будет добавлен в модель, поэтому вам не нужно его сбрасывать.
Все, что вам нужно сделать в методе settable()
, это использовать метод addRow (...) для добавления данных в модель.
Или, если структура таблицы меняется (т. Е. У вас разные столбцы), то вы бы:
- создайте новую TableModel и добавьте ее в таблицу.
- добавить TableModelListener в TableModel
Вот и все, по-прежнему нет необходимости создавать новый JTable.
scrollPane_table.remove(table);
scrollPane_table.add(table)
Избавьтесь от приведенного выше кода. Никогда не пытайтесь добавлять / удалять компоненты из JScrollPane. Компоненты добавляются в JViewport
JScrollPane. Если вам нужно заменить компонент в области просмотра, тогда вы просто используете:
scrollPane.setViewportView(...);
Edit:
Таким образом, вам нужно создать простой пример с JFrame, содержащим JTable и JButton с ActionListener, чтобы изменить модель таблицы.
Таким образом, базовый код будет выглядеть примерно так:
table = new JTable( new DefaultTableModel(3, 5) );
frame.add(new JScrollPane(table), BorderLayout.CENTER);
JButton button = new JButton("Change Model");
frame.add(button, BorderLayout.PAGE_END);
button.addActionListener( new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
table.setModel( new DefaultTableModel(3, 7) );
}
});