Как добавить кнопки в JTable?

Как прикрутить кнопки внизу таблицы? В примере я пытался только для одной, но пробовал разными способами и ничего не вышло

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.TableModel;
import java.awt.*;
import java.util.ArrayList;


public class ComparingTypeOfCollections extends JFrame implements TableModelListener
{
    public ComparingTypeOfCollections() {
        super("Comparing types of collections");
        //закрытие окна
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        // добавление колонок  в таблицу
         String[] columnNames = new String[]{"Type","Units","Add","Remove","Populate","Contains","Get"};

        // Заголовки рядов
        Object[][] rowNames = new Object[][]{
                                            {"ArrayList", "sec", 0d,0d,0d,0d,0d},
                                            {"LinkedList","sec",0d,0d,0d,0d,0d},
                                            {"HashSet","sec", 0d,0d,0d,0d,0d},
                                            {"TreeSet","sec",0d,0d,0d,0d,0d}
                                            };

        //создание самой таблицы и добавление в нее рядов и столбцов
        JTable table = new JTable(rowNames,columnNames);


        //добавление компоновщика для размещения элементов
        Box contents = new Box(BoxLayout.Y_AXIS);

        //добавление полосы прокрутки к таблице
        contents.add(new JScrollPane(table));

        //добавление обработчика событий к таблице
        table.getModel().addTableModelListener(this);

        //установление высоты строк
        table.setRowHeight(0,25);
        table.setRowHeight(1,25);
        table.setRowHeight(2,25);
        table.setRowHeight(3,25);

        //добавление контента к окну
        setContentPane(contents);

        //установление размера окна
        setSize(500, 200);

        //установление масштабирования, видимости и размещения
        setResizable(false);
        setVisible(true);
        setLocationRelativeTo(null);


        //добавление кнопок для рассчета эффективности элементов
        JButton button_100 = new JButton("Calculate for 100 elements");
        JButton button_1000 = new JButton("Calculate for 1 000 elements");
        JButton button_10000 = new JButton("Calculate for 100 000 elements");

        //настройки кнопок
        button_100.setVisible(true);
        button_100.setBounds(50,150,100,50);

        JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
        buttonPanel.add(button_100);
        buttonPanel.add(button_1000);
        buttonPanel.add(button_10000);




        //добавление кнопок к таблице

        table.add(button_100);
        table.add(button_1000);
        table.add(button_10000);
        toCollect100Elements();

    }


    private ArrayList<Double> toCollect100Elements(){
        ArrayList<Double> list = new ArrayList<>();
        for (double k = 0; k<100; k++){
            double n = k+Math.random();
            list.add(n);
        }
        return list;
    }
    public static void main(String[] args) {
        new ComparingTypeOfCollections();

    }


    @Override
    public void tableChanged(TableModelEvent e) {
        int row = e.getFirstRow();
        int column = e.getColumn();
        TableModel model = (TableModel)e.getSource();
        String columnNameEvent = model.getColumnName(column);
        Object dataEvent = model.getValueAt(row,column);
    }
}

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

Автор решения: Alexey R.

Можно положить таблицу в панель, и в ту же панель, другую панель ниже таблицы. Во вторую, уже со своим лейаутом,положить кнопки.

введите сюда описание изображения

Пример кода:

public static void main(String[] args) {
    JFrame jFrame = new JFrame();
    jFrame.setSize(200, 200);
    Object rowData[][] = {
            {"A1", "B1"},
            {"A2", "B2"}
    };
    Object[] columnNames = {"A", "B"};

    JPanel mainPane = new JPanel();
    mainPane.setLayout(new BoxLayout(mainPane, BoxLayout.Y_AXIS));

    JPanel buttonPane = new JPanel();
    buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.X_AXIS));
    buttonPane.setMaximumSize(new Dimension(jFrame.getWidth(), 30));

    JTable table = new JTable(rowData, columnNames);

    Button button1 = new Button("Test 1");
    Button button2 = new Button("Test 2");
    buttonPane.add(button1);
    buttonPane.add(button2);

    mainPane.add(table);
    mainPane.add(buttonPane);

    jFrame.add(mainPane);
    jFrame.setVisible(true);
}

Результат:

введите сюда описание изображения

→ Ссылка