Нужна кнопка, чтобы остаться внизу моего диалога - PullRequest
3 голосов
/ 22 января 2012

Я первоначально разместил этот вопрос на форуме miglayout, и после 534 просмотров и без ответов я решил попробовать его там; -)

Я попытался расширить «начальный пример» из документа MigLayout, чтобы добавить кнопку «ОК», которая всегда останется в нижней части диалогового окна.

К сожалению, единственное решение, которое я нашел, это добавить «поддельную панель», которая будет расти:

public class TestResize extends JDialog {
    protected JPanel contentPane;

    public TestResize() {
        super((Dialog) null, "Test resize", true);
        setupUI();
        setContentPane(contentPane);
    }

    private void setupUI() {
        contentPane = new JPanel(new MigLayout());
        contentPane.add(new JLabel("Enter size:"), "");
        contentPane.add(new JTextField(""), "grow, pushx, wrap");
        contentPane.add(new JLabel("Enter weight:"), "");
        contentPane.add(new JTextField(""), "grow, pushx, wrap");
        // fake panel that is allowed to grow
        contentPane.add(new JPanel(), "span 2, grow, pushy, wrap");
        JButton okButton = new JButton("Ok");
        JPanel buttonPanel = new JPanel(new MigLayout("", "[center, grow]"));
        buttonPanel.add(okButton, "");
        contentPane.add(buttonPanel, "dock south");
    }

    public static void main(String[] args) {
        TestResize dialog = new TestResize();
        dialog.pack();
        dialog.setVisible(true);
    }
}

Мне действительно не нравится этот подход ... но есть ли лучший способ?

(похоже, мне не разрешено загружать картинки, но пользовательский интерфейс, который я хочу получить, виден в моем исходном сообщении )

Спасибо!

1 Ответ

4 голосов
/ 22 января 2012

Если вы создаете MigLayout с явной сеткой, вы можете иметь ": push" между двумя строками:

new MigLayout(
      "",                 // Layout Constraints
      "[][]",             // Column constraints
      "[][][]:push[]");   // Row constraints

(см. Раздел «Ограничения столбцов / строк» ​​в шпаргалке )

Edit:

На самом деле, лучшим решением является использование «толчка обертки» в конце предыдущего ряда. Тогда вам не нужно явно указывать количество строк в сетке:

contentPane.add(new JPanel(), "span 2, grow, pushy, wrap push");
...