Как центрировать компонент в строке, содержащей несколько компонентов, с помощью MiGLayout - PullRequest
11 голосов
/ 06 августа 2011

Я начал использовать MiGLayout около полутора месяцев назад, и все просто и прекрасно работает. У меня осталась только одна проблема, которую я не смог исправить.

Допустим, я хочу иметь строку с двумя кнопками справа и заголовком по центру, заголовок фактически не центрируется, когда я делаю это следующим образом:

(«это» - JPanel)

this.add(labelTitle, "split, span, center");
this.add(closeButton, "east");
this.add(mainMenuButton, "east");   

Что происходит, так это то, что «labelTitle» центрируется в оставшемся пространстве, доступном после размещения кнопок, но я на самом деле хочу, чтобы он был центрирован относительно всего JPanel, а не только оставшегося пространства.

Какие параметры я могу использовать для получения желаемого эффекта? Я знаю, что мог бы использовать абсолютное позиционирование, но я не хочу этого делать, потому что это отрицает цель использования MiGLayout на первом месте в моем случае.

Ответы [ 3 ]

6 голосов
/ 12 августа 2011

Это может быть что-то подобное, что вы ищете?

Ура!

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);
}
1 голос
/ 11 августа 2011

Вы можете использовать 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); 
0 голосов
/ 11 августа 2011

При создании JPanel, используйте следующий инициализатор MigLayout:
new MigLayout("","[]push[center]push[]","")

Если вы не знаете об ограничениях, проверьте здесь: MigLayout Whitepaper

Предполагается, что в этой JPanel больше ничего нет ...

...