Java 需要按钮停留在我的对话框底部

Java 需要按钮停留在我的对话框底部,java,swing,user-interface,miglayout,Java,Swing,User Interface,Miglayout,我最初在miglayout论坛上发布了这个问题,经过534次查看,没有答案,我决定在那里尝试;-) 我试图扩展MigLayout白皮书中的“初始示例”,以便添加一个始终位于对话框底部的“OK”按钮 不幸的是,我找到的唯一解决方案是添加一个“假面板”,它将增长: public class TestResize extends JDialog { protected JPanel contentPane; public TestResize() { super((D

我最初在miglayout论坛上发布了这个问题,经过534次查看,没有答案,我决定在那里尝试;-)

我试图扩展MigLayout白皮书中的“初始示例”,以便添加一个始终位于对话框底部的“OK”按钮

不幸的是,我找到的唯一解决方案是添加一个“假面板”,它将增长:

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);
    }
}
我真的一点也不喜欢这种方法。。。但是有更好的办法吗

(看起来我不允许上传图片,但我想要的UI是可见的)


谢谢

如果使用显式网格构建MigLayout,则可以在两行之间插入“:push”:

new MigLayout(
      "",                 // Layout Constraints
      "[][]",             // Column constraints
      "[][][]:push[]");   // Row constraints
(请参见中的“列/行约束”部分)

编辑:

实际上,更好的解决方案是在前一行的末尾使用“换行推送”。这样就不需要显式设置网格中的行数:

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

不幸的是,我找到的唯一解决办法是添加一个“假面板”,该面板会越来越大:“这有什么不幸的?在嵌套布局中,额外的面板非常常见。没问题。@AndrewThompson高级布局管理器的全部思想是不使用嵌套面板,也不使用胶水或其他虚拟组件;-)MigLayout中的嵌套和虚拟组件确实是一个非常强烈的错误指示——就像laurent一样felt@kleopatra呃。。一点胶水和鸭绒胶带没问题但更严重的是,我明白你的意思。我太习惯于以J2SE布局为核心,有时看不到更大的图景。@AndrewThompson:Russel下面的回答完美地解决了我的问题。我知道MigLayout可以在没有假面板的情况下完成,但文档非常详尽,有时很难找到正确的关键字;-)是的,正是我所需要的:再见“假面板”,非常感谢拉塞尔!或者,您可以在最后一个组件上使用“换行推送”,即您希望推送到框架底部的组件。