Swing MIG布局:can';I don’我没法正常工作

Swing MIG布局:can';I don’我没法正常工作,swing,miglayout,Swing,Miglayout,这里有些不对劲。我试图让最右边的按钮(在下面的例子中标记为“帮助”)与JFrame右对齐,而巨大的按钮的宽度与JFrame绑定,但每个按钮至少为180px。我得到了巨大的按钮约束来工作,但没有正确的对齐方式 我认为正确的对齐是在推之前通过gap完成的(如中所示),但我无法理解 有人能帮我吗 import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import net.miginfocom

这里有些不对劲。我试图让最右边的按钮(在下面的例子中标记为“帮助”)与JFrame右对齐,而巨大的按钮的宽度与JFrame绑定,但每个按钮至少为180px。我得到了巨大的按钮约束来工作,但没有正确的对齐方式

我认为正确的对齐是在推之前通过
gap完成的(如中所示),但我无法理解

有人能帮我吗

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);
    }
}
import javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入net.miginfocom.swing.MigLayout;
公共类问题{
公共静态void main(字符串[]args){
JFrame=新JFrame(“右对齐问题”);
JPanel mainPanel=新的JPanel();
frame.setContentPane(主面板);
setLayout(新的MigLayout(“插入0”,“增长],”);
JPanel-topPanel=新的JPanel();
setLayout(新的MigLayout(“,”[]);
对于(int i=0;i<3;++i)
添加(新的JButton(“按钮”+i),”);
添加(新的JButton(“帮助”),“推前间隙,包装”);
添加(新的JButton(“大按钮”),“span 3,grow”);
JPanel bottomPanel=新的JPanel();
bottomPanel.setLayout(新的MigLayout(“”,
[180:180:,grow][180:180:,grow],“100:”;
添加(新的JButton(“粗花呢”),“grow”);
添加(新的JButton(“tweedledum”),“grow”);
主面板。添加(topPanel,“生长、包裹”);
添加(底部面板,“增长”);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

没关系,我明白了:看起来在列规范中需要有间隙约束,而不是在组件级别:

    topPanel.setLayout(new MigLayout("", "[][][]push[]", ""));
一种更简单/更干净的方法(IMOH)是使用组件约束和

添加(新的JButton(“帮助”),“推,右,包裹”)

Push将在窗口拉伸时将单元格推出,但您需要告诉组件将其自身绑定到单元格的右侧。您可以通过以下代码实现上述功能

    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");
JPanel-topPanel=newjpanel();
frame.setContentPane(topPanel);
对于(int i=0;i<3;++i)
添加(新的JButton(“按钮”+i),”);
添加(新的JButton(“帮助”),“推,右,包裹”);
添加(新的JButton(“大按钮”),“span 3,grow,wrap”);
topPanel.add(新的JButton(“粗花呢”),“跨度,分裂2,生长,宽180,高100”);
topPanel.add(新的JButton(“tweedledum”),“w 180,h 100,grow”);

我对MigLayout了解不够,无法回答这个问题,但请尝试在topPanel上添加边框,以确保它实际上与窗口一样宽。如果不是,这就解释了为什么帮助没有正确对齐。我在自己的应用程序中使用了一个“span,gapleft push”
panel.add(按钮,“cell 2 0,gapleft push”)为我做了这件事。请记住,这仅在添加组件时完成。