Когда я использую FlowLayout
, компоненты перемещаются в новую строку, когда достигают предела. Я хочу точно такой же, но Вертикальный. Проведя небольшое исследование, я обнаружил, что то, что я хочу сделать, должно быть выполнено sh с использованием BoxLayout
. Но мой макет блока использует только один столбец.
Я хочу, чтобы вторая панель обнаружила, что ее места недостаточно для отображения всех компонентов на главной панели и поместила ее в второй столбец.
Вот код для воспроизведения проблемы.
import javax.swing.*;
public class TestingMain {
static JFrame frame;
public static JPanel createUI() {
JPanel UIPanel = new JPanel();
UIPanel.setLayout(new BoxLayout(UIPanel, BoxLayout.Y_AXIS));
JPanel firstPanel = new JPanel();
JPanel secondPanel = new JPanel();
firstPanel = new JPanel();
firstPanel.setLayout(new BoxLayout(firstPanel, BoxLayout.Y_AXIS));
firstPanel.setBorder(BorderFactory.createTitledBorder("Box 1"));
JCheckBox ch1 = new JCheckBox("checkbox!");
JCheckBox ch2 = new JCheckBox("checkbox!");
JCheckBox ch3 = new JCheckBox("checkbox!");
JCheckBox ch4 = new JCheckBox("checkbox!");
JCheckBox ch5 = new JCheckBox("checkbox!");
JCheckBox ch6 = new JCheckBox("checkbox!");
JCheckBox ch7 = new JCheckBox("checkbox!");
firstPanel.add(ch1);
firstPanel.add(ch2);
firstPanel.add(ch3);
firstPanel.add(ch4);
firstPanel.add(ch5);
firstPanel.add(ch6);
firstPanel.add(ch7);
secondPanel.setBorder(BorderFactory.createTitledBorder("Box 2"));
secondPanel.setLayout(new BoxLayout(secondPanel, BoxLayout.Y_AXIS));
JCheckBox alarmLimitedBatt = new JCheckBox("checkbox!");
JCheckBox alarmNotEnoughBatt = new JCheckBox("checkbox!");
JCheckBox alarmLowBatt = new JCheckBox("checkbox!");
JCheckBox alarmCriticalBatt = new JCheckBox("checkbox!");
JCheckBox stateOfCharge = new JCheckBox("checkbox!");
JCheckBox sleepState = new JCheckBox("checkbox!");
secondPanel.add(alarmLimitedBatt);
secondPanel.add(alarmNotEnoughBatt);
secondPanel.add(alarmLowBatt);
secondPanel.add(alarmCriticalBatt);
secondPanel.add(stateOfCharge);
secondPanel.add(sleepState);
UIPanel.add(firstPanel);
UIPanel.add(secondPanel);
return UIPanel;
}
private static void createAndShowGUI() {
//Create and set up the window.
frame = new JFrame("BoxLayout Issue");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
JPanel newContentPane = createUI();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.setSize(800,250);
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}