Как можно удалить с JFrame элемент и заново его сгенерировать с новыми данными?

Допустим, у нас есть JFrame, на нем есть два поля JTextField, из них по кнопке JButton мы считываем два числа (строки и столбцы). На основании этих чисел у нас формируется таблица JTable (N x N). Я бы хотел найти способ, при котором последующее введение чисел и нажатие кнопки удаляло старую таблицу с фрейма и генерировало бы новую (подмена одной таблицы другой), и при этом размер JFrame также бы изменялся в зависимости от размера новой таблицы.

Непонятен в первую очередь сам механизм удаления старой таблицы и замена её на новую с новыми данными.

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class P2 {
    private static int rows;
    private static int columns;

    public static void createGUI() {
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame("Тестовое окно");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new FlowLayout());

        JTextField textField1 = new JTextField();
        textField1.setColumns(5);
        frame.add(textField1);
        JTextField textField2 = new JTextField();
        textField2.setColumns(5);
        frame.add(textField2);

        JButton button = new JButton("Расчет");
        frame.add(button);
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                rows = Integer.parseInt(textField1.getText());
                columns = Integer.parseInt(textField2.getText());

                String[] names = new String[columns];
                for (int i = 0; i < names.length; i++) {
                    names[i] = "A" + i;
                }

                Integer[][] matrix = new Integer[rows][columns];
                for (int i = 0; i < matrix.length; i++) {
                    for (int j = 0; j < matrix[i].length; j++) {
                        matrix[i][j] = rows * columns + i + j;
                    }
                }

                JTable table = new JTable(matrix, names);
                JScrollPane scrollPane = new JScrollPane(table);

                frame.add(scrollPane);
                frame.setSize(500, 200);
            }
        });

        frame.setPreferredSize(new Dimension(250, 75));
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createGUI();
            }
        });
        System.gc();
    }
}

Ответы (0 шт):