MiGLayout несколько компонентов на границе - PullRequest
3 голосов
/ 20 февраля 2012

У меня есть MigLayout, к которому я хотел бы динамически добавлять компоненты, сохраняя при этом две кнопки внизу рамки (потому что это интуитивно понятно).

Во-первых, я хотел бы знать, является ли то, что я сейчас делаю, лучшим способом для этого, а во-вторых, как получить то, что я пытаюсь сделать, чтобы действительно работать.

В данный момент я использую «сетку» MigLayout для позиционирования динамически добавляемых компонентов, а затем использую «границу» MigLayout для позиционирования фиксированных компонентов, но я не могу заставить обе кнопки сидеть на юге границы рядом друг с другом.

Согласно Quickstart PDF, это должно быть возможно (и я цитирую: «Вы не ограничены использованием только одного компонента на каждую сторону»), но это не означает, что как вы достичь этого.

Ответы [ 2 ]

3 голосов
/ 20 февраля 2012

Лично я бы лучше разделил мой JFrame на 2 JPanels с BorderLayout . Поместите форму MigLayout в JPanel в области CENTER, а кнопки в поле Box в области SOUTH.

РЕДАКТИРОВАТЬ

С примером это даже лучше; -)

public static void main(String[] args) {

    JFrame frame = new JFrame();
    frame.setLayout(new BorderLayout());

    // == MigLayout Form ==
    JPanel panelCenter = new JPanel();
    panelCenter.setLayout(
                new MigLayout(
                        new LC().wrapAfter(4),
                        new AC().size(":80:", 0).size("115:115:115", 1, 2, 3).align("right", 0, 2),
                        new AC().size("19:19:19")
                ));
    panelCenter.setOpaque(false);

    panelCenter.add(new JLabel("Label1"));
    panelCenter.add(new JTextField(), new CC().growX());
    panelCenter.add(new JLabel("Label2"));
    panelCenter.add(new JTextField(), new CC().growX());
    panelCenter.add(new JLabel("Label3"));
    panelCenter.add(new JTextField(), new CC().growX());
    panelCenter.add(new JLabel("Label4"));
    panelCenter.add(new JTextField(), new CC().growX());
    panelCenter.add(new JLabel("Label5"));
    panelCenter.add(new JTextField(), new CC().growX());
    panelCenter.add(new JLabel("Label6"));
    panelCenter.add(new JTextField(), new CC().growX());

    frame.add(panelCenter, BorderLayout.CENTER);

    // == Buttons ==
    Box southPanel = Box.createHorizontalBox();
    southPanel.add(Box.createHorizontalGlue());
    southPanel.add(new JButton("Ok"));
    southPanel.add(new JButton("Cancel"));
    southPanel.add(Box.createHorizontalGlue());
    frame.add(southPanel, BorderLayout.SOUTH);

    frame.setVisible(true);
    frame.setSize(500, 150);
}
0 голосов
/ 23 сентября 2012

Я сделал это так:

create = new JButton("Create");
create.addActionListener(this);
mainPanel.add(create, "tag ok, span, split 2, sg btn");

cancel = new JButton("Cancel");
cancel.addActionListener(this);
mainPanel.add(cancel, "tag cancel, sg btn");

Это на самом деле только последняя строка в моей сетке, но похоже, что ключ использует span и split (sg просто группирует размеры кнопок, а tag позиционирует их - прекрасная особенность) , Я нашел пример здесь (поиск "панель кнопок").

...