Как добавить кнопки в 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);
}
Результат:

