Как установить 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 шт):

Автор решения: Roman C

По умолчанию используется FlowLayout.

Наглядное руководство по менеджерам макетов

FlowLayout — это менеджер макетов по умолчанию для каждой JPanel. Он просто размещает компоненты в одну строку, начиная новую строку, если его контейнер недостаточно широкий. Для получения дополнительных сведений см. Как использовать FlowLayout.

Переопределить это нельзя. Но, вы можете расширить JPanel, чтобы установить свой макет:

public class MyPanel extends JPanel {
  public MyPanel() {
    setLayout(new AutoLayout());
  }
}
→ Ссылка