Miglayout: не может получить правильное выравнивание для работы - PullRequest
7 голосов
/ 14 января 2011

Что-то здесь не так. Я пытаюсь заставить крайнюю правую кнопку (помеченную как «помощь» в приведенном ниже примере) выровнять по правому краю JFrame, а огромные кнопки привязать их ширину к JFrame, но по крайней мере 180px каждая. Я получил огромное ограничение кнопки для работы, но не правильное выравнивание.

alt text

Я думал, что правильное выравнивание было достигнуто gapbefore push (как в этом другом вопросе ), но я не могу понять это.

Кто-нибудь может мне помочь?

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;

public class RightAlignQuestion {
    public static void main(String[] args) {
        JFrame frame = new JFrame("right align question");
        JPanel mainPanel = new JPanel();
        frame.setContentPane(mainPanel);

        mainPanel.setLayout(new MigLayout("insets 0", "[grow]", ""));

        JPanel topPanel = new JPanel();
        topPanel.setLayout(new MigLayout("", "[][][][]", ""));
        for (int i = 0; i < 3; ++i)
            topPanel.add(new JButton("button"+i), "");
        topPanel.add(new JButton("help"), "gapbefore push, wrap");
        topPanel.add(new JButton("big button"), "span 3, grow");

        JPanel bottomPanel = new JPanel();
        bottomPanel.setLayout(new MigLayout("",
              "[180:180:,grow][180:180:,grow]","100:"));
        bottomPanel.add(new JButton("tweedledee"), "grow");
        bottomPanel.add(new JButton("tweedledum"), "grow");

        mainPanel.add(topPanel, "grow, wrap");
        mainPanel.add(bottomPanel, "grow");
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

Ответы [ 2 ]

8 голосов
/ 14 января 2011

не берите в голову, я понял: похоже, что в спецификации столбца должно быть ограничение пробела, а не на уровне компонента:

    topPanel.setLayout(new MigLayout("", "[][][]push[]", ""));
3 голосов
/ 17 декабря 2012

гораздо проще / чище (IMOH) - использовать ограничения компонентов и делать

topPanel.add (новый JButton ("help"), "push, al right, wrap");

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

    JPanel topPanel = new JPanel();
    frame.setContentPane(topPanel);

    for (int i = 0; i < 3; ++i)
        topPanel.add(new JButton("button"+i), "");
    topPanel.add(new JButton("help"), "push, al right, wrap");


    topPanel.add(new JButton("big button"), "span 3, grow, wrap");

    topPanel.add(new JButton("tweedledee"), "span, split2,grow, w 180, h 100");
    topPanel.add(new JButton("tweedledum"), "w 180, h 100, grow");
...