Java 单元格的权重向右,而不是向左

Java 单元格的权重向右,而不是向左,java,swing,miglayout,Java,Swing,Miglayout,在示例程序的第一个选项卡中:在第一行中,组件在其单元格中是r和l对齐的。在第二行,单元格被跨越并向右推 第一行中的所有多余空间都分配给单元格0,0,其中包含标记为“20”的组件 选项卡“2”通过使用pushx改善了这种情况。小部件看起来居中,但这不是我想要的 但是我如何将所有多余的空间分配给单元格0,1(包含标记为“30”的组件的单元格)?我试图发布一张我想要完成的事情的图片,但系统不允许这样做。希望我的口头解释足够清楚 package test1; import javax.swing.JB

在示例程序的第一个选项卡中:在第一行中,组件在其单元格中是r和l对齐的。在第二行,单元格被跨越并向右推

第一行中的所有多余空间都分配给单元格0,0,其中包含标记为“20”的组件

选项卡“2”通过使用pushx改善了这种情况。小部件看起来居中,但这不是我想要的

但是我如何将所有多余的空间分配给单元格0,1(包含标记为“30”的组件的单元格)?我试图发布一张我想要完成的事情的图片,但系统不允许这样做。希望我的口头解释足够清楚

package test1;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

import net.miginfocom.swing.MigLayout;

public class Main extends JTabbedPane {

public Main() {
    addTab("One",   createPanel1());
    addTab("Two",   createPanel2());

}
public static void main(String[] args) {
    final JFrame frame = new JFrame("Test MigLayout");
    Main main = new Main();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setContentPane(main);
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            frame.pack();
            frame.setVisible(true);
            frame.setBounds(200, 200, 800, 500);
        }
    });
}

private JPanel createPanel1() {
    JPanel      panel           = new JPanel(new MigLayout("hidemode 3, debug", "[r][l]"));
    JTextField textField1 = new JTextField("20", 20);
    JTextField textField2 = new JTextField("30", 30);
    JButton button = new JButton("Button");
    panel.add(textField1);
    panel.add(textField2, "wrap");
    panel.add(button, "span 2, pushx");
    return (panel);
}
private JPanel createPanel2() {
    JPanel      panel           = new JPanel(new MigLayout("hidemode 3, debug", "[r][l]"));
    JTextField textField1 = new JTextField("20", 20);
    JTextField textField2 = new JTextField("30", 30);
    JButton button = new JButton("Button");
    panel.add(textField1);
    panel.add(textField2, "pushx, wrap");
    panel.add(button, "span 2, pushx");
    return (panel);
}

}
对于任何单元格都是水平增长的情况感到惊讶,因为默认情况下不会这样做。在重新读取推送文档之前:

使组件所在的行和/或列增长 “重量”。这可以用来代替中的“grow”关键字 列/行约束

在按钮的跨度单元格中使用它可以有效地将增长约束应用于跨度的第一列。在不知道确切目标的情况下,很难给出任何建议,除了说:不要:-)一个选项可能是明确增加第二列:

JPanel panel = new JPanel(new MigLayout("hidemode 3, debug, wrap 2", "[r][l, grow]"));
JTextField textField1 = new JTextField("20", 20);
JTextField textField2 = new JTextField("30", 30);
JButton button = new JButton("Button");
panel.add(textField1);
panel.add(textField2);
panel.add(button, "span");
顺便说一句:我总是建议在层次结构中尽可能高的位置定义约束(布局>行/列>组件)-在DRY:-)之后。

对任何单元格都是水平增长感到惊讶,因为默认情况下不是这样。在重新读取推送文档之前:

使组件所在的行和/或列增长 “重量”。这可以用来代替中的“grow”关键字 列/行约束

在按钮的跨度单元格中使用它可以有效地将增长约束应用于跨度的第一列。在不知道确切目标的情况下,很难给出任何建议,除了说:不要:-)一个选项可能是明确增加第二列:

JPanel panel = new JPanel(new MigLayout("hidemode 3, debug, wrap 2", "[r][l, grow]"));
JTextField textField1 = new JTextField("20", 20);
JTextField textField2 = new JTextField("30", 30);
JButton button = new JButton("Button");
panel.add(textField1);
panel.add(textField2);
panel.add(button, "span");

顺便说一句:我始终建议在层次结构中尽可能高的位置定义约束(布局>行/列>组件)-以下为干式:-)

感谢您的及时响应。列约束中的“增长”对我不起作用,但你的评论让我思考。因此,我去掉了“grow”并在textField2中添加了“pushx”,这具有相同的效果。感谢您及时的回复。列约束中的“增长”对我不起作用,但你的评论让我思考。所以我去掉了“grow”并在textField2中添加了“pushx”,这具有相同的效果。