Вы должны использовать соответствующий Layoutmanager, такой как GridLayout, Boxlayout или GridBagLayout для панели.
Это зависит от того, что еще вы хотите поместить в панель.
GridLayout проще в использовании IMO:
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(0, 1)); // any number of rows, 1 column
...
panel.add(button[i]);
BoxLayout почти так же просто:
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
...
panel.add(button[i]);
GridBagLayout является более мощным, позволяя использовать более одного столбца, компоненты охватывают более чем одну ячейку ... для добавления элементов требуется GridBagConstraints:
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints(
0, RELATIVE, // x = 0, y = below previous element
1, 1, // cell width = 1, cell height = 1
0.0, 0.0 // how to distribute space: weightx = 0.0, weighty = 0,0
GridBagConstraints.CENTER, // anchor
GridBagConstraints.BOTH, // fill
new Insets(0, 0, 0, 0), // cell insets
0, 0); // internal padding
...
panel.add(button[i], constraints);
Взгляните на этот урок: Размещение компонентов внутри контейнера (визуальное руководство - хорошая отправная точка)
EDIT
Вы также можете раскладывать компоненты вручную , то есть указывать расположение и размер каждого компонента в контейнере. Для этого вы должны установить LayoutManager на null
, чтобы менеджер по умолчанию был удален.
JPanel panel = new JPanel();
panel.setLayout(null);
...
button[i].setLocation(x, y);
button[i].setSize(width, heigth);
// OR button[i].setBounds(x, y, width, height);
panel.add(button[i]);