Как центрировать компонент в строке, содержащей несколько компонентов с помощью MiGLayout
Я начал использовать MiGLayout около месяца и половины назад, и все просто и отлично работает. Там только одна проблема, которую я до сих пор не могу исправить.
Скажем, я хочу иметь строку с двумя кнопками с правой стороны и центральным названием, название на самом деле не центрируется, когда я делаю это следующим образом:
("this" является JPanel)
this.add(labelTitle, "split, span, center");
this.add(closeButton, "east");
this.add(mainMenuButton, "east");
Что происходит, так это то, что "labelTitle" центрируется в оставшемся пространстве, доступном после размещения кнопок, но я действительно хочу, чтобы он был центрирован относительно всего JPanel, а не только оставшегося пространства.
Какие параметры можно использовать для получения желаемого эффекта? Я знаю, что могу использовать абсолютное позиционирование, но я не хочу этого делать, потому что он побеждает цель использования MiGLayout в первую очередь в моем случае.
Ответы
Ответ 1
Может ли быть что-то вроде этого вы ищете?
Ура!
public static void main(String[] args)
{
JFrame frame = new JFrame();
JPanel panel = new JPanel(new MigLayout("debug"));
panel.add(new JLabel("Label Title"), "x2 min(b1.x - unrel, (container.w+pref)/2)");
panel.add(new JButton("Close Button"), "id b1, pushx, alignx right");
panel.add(new JButton("Main Menu Button"), "alignx right");
frame.add(panel);
frame.setSize(800, 200);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
}
Ответ 2
Вы можете использовать JXLayer и поместить кнопки в стеклянную панель.
JButton closeButton = new JButton("Close");
JButton mainMenuButton = new JButton("Menu");
JLabel labelTitle = new JLabel("Application");
JPanel panel = new JPanel();
panel.setLayout(new MigLayout(new LC().fillX()));
panel.add(labelTitle, new CC().alignX("center").spanX());
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new MigLayout(new LC().fillX()));
buttonPanel.add(closeButton, new CC().alignX("right").split());
buttonPanel.add(mainMenuButton, new CC().alignX("right"));
buttonPanel.setOpaque(false);
JXLayer<JPanel> mainPanel = new JXLayer<JPanel>();
mainPanel.setView(panel);
mainPanel.setGlassPane(buttonPanel);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(mainPanel);
frame.setSize(400, 600);
frame.setVisible(true);
Ответ 3
При создании вашей JPanel используйте следующий инициализатор MigLayout:
new MigLayout("","[]push[center]push[]","")
Если вы не знаете о ограничениях, проверьте здесь: Документ MigLayout
Это предполагает, что в этом JPanel нет ничего другого...