Как установить LayoutManager по умолчанию в PanelUI?
У меня есть наследники LookAndFeel
и PanelUI
. Я хочу сделать так, чтобы панелям по умолчанию задавался мой класс AutoLayout
, однако, если я задаю его в методе installUI
, он переопределяет менеджер компоновки, установленный после создания панелей.
Например:
JFrame frame = new JFrame("Demo JFrame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 200);
JPanel panel = new JPanel(new GridLayout(2,0);
for (int i = 0; i < 5; i++) {
JButton button = new JButton("Button " + i);
panel.add(button);
}
frame.add(panel);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
System.out.println("Текущая компоновка: " + panel.getLayout().getClass().getSimpleName());
Результат:
У панели задана компоновка AutoLayout
.
Ответы (1 шт):
По умолчанию используется FlowLayout
.
Наглядное руководство по менеджерам макетов
FlowLayout
— это менеджер макетов по умолчанию для каждойJPanel
. Он просто размещает компоненты в одну строку, начиная новую строку, если его контейнер недостаточно широкий. Для получения дополнительных сведений см. Как использоватьFlowLayout
.
Переопределить это нельзя. Но, вы можете расширить JPanel
, чтобы установить свой макет:
public class MyPanel extends JPanel {
public MyPanel() {
setLayout(new AutoLayout());
}
}