Если ваша цель состоит в том, чтобы центрировать компонент, то GridBagLayout прекрасно выполнит эту работу:
public class CenteringPanel extends JPanel {
public CenteringPanel(JComponent child) {
GridBagLayout gbl = new GridBagLayout();
setLayout(gbl);
GridBagConstraints c = new GridBagConstraints();
c.gridwidth = GridBagConstraints.REMAINDER;
gbl.setConstraints(child, c);
add(child);
}
}
GridBagLayout создаст одну ячейку, которая заполняет панель.Значением по умолчанию для ограничений является центрирование каждого компонента в его ячейке как по горизонтали, так и по вертикали и заполнение в любом направлении.
Если ваша цель - использовать Glue в BoxLayout для центрирования компонента, тогда заданиенемного сложнее.Добавление горизонтального клея с вертикальным BoxLayout не помогает, потому что компоненты располагаются вертикально (и аналогично для горизонтального BoxLayout).Вместо этого вам нужно ограничить размер дочернего элемента и использовать его выравнивание.Я не пробовал, но для вертикальной BoxLayout, что-то вроде этого должно работать:
public class CenteringPanel {
public CenteringPanel(JComponent child) {
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
GridBagConstraints c = new GridBagConstraints();
child.setMaximumSize(child.getPreferredSize());
child.setAlignmentX(Component.CENTER_ALIGNMENT);
add(Box.createVerticalGlue());
add(child);
add(Box.createVerticalGlue());
}
}