Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中格式化GUI上的布局_Java_User Interface - Fatal编程技术网

如何在Java中格式化GUI上的布局

如何在Java中格式化GUI上的布局,java,user-interface,Java,User Interface,所以我添加了我的标签和所有内容,但我仍然无法格式化和对齐所有内容。“计算”按钮显然应该居中。我知道使用gridbag会将框架拆分为坐标系,当一列比其他列大时,它会调整其他列并将其丢弃(对吗?)。但我甚至不知道如何解决这个问题。但仍然无法将所有东西都向左对齐,这样它就不会开始朝向中心 JPanel p = new JPanel(new GridBagLayout()); GridBagConstraints gc = new GridBagConstraints(); //0 Column

所以我添加了我的标签和所有内容,但我仍然无法格式化和对齐所有内容。“计算”按钮显然应该居中。我知道使用gridbag会将框架拆分为坐标系,当一列比其他列大时,它会调整其他列并将其丢弃(对吗?)。但我甚至不知道如何解决这个问题。但仍然无法将所有东西都向左对齐,这样它就不会开始朝向中心

 JPanel p = new JPanel(new GridBagLayout());


GridBagConstraints gc = new GridBagConstraints();

//0 Column
    gc.gridx = 0;
    gc.gridy = 0;
    gc.anchor = GridBagConstraints.EAST;
    p.add(new JLabel("Mortgage amount:"),gc);


    gc.gridx = 0;
    gc.gridy =1;
    p.add(new JLabel("Mortgage term:"),gc);



    gc.gridx = 0;
    gc.gridy = 2;
    p.add(new JLabel("Interest rate:"),gc);

    gc.gridx = 0;
    gc.gridy = 3;
    p.add(new JLabel("Mortgage start date:"),gc);

    gc.gridx = 0;
    gc.gridy= 4;
    p.add(new JLabel("Monthly Payments:"),gc);

    gc.gridx = 0;
    gc.gridy = 7;
    p.add(new JLabel("Extra payments"),gc);

    gc.gridx = 0;
    gc.gridy = 8;
    p.add(new JLabel("Adding: "),gc);

    gc.gridx = 0;
    gc.gridy = 9;
    p.add(new JLabel("Adding: "),gc);

    gc.gridx = 0;
    gc.gridy = 10;
    p.add(new JLabel("Adding: "),gc);

    gc.gridx = 0;
    gc.gridy = 11;
    p.add(new JLabel("Changes paid off date to:"),gc);


    //1 Column
    gc.gridx = 1;
    gc.gridy = 0;
    p.add(new JLabel("$"),gc);

    gc.gridx = 1;
    gc.gridy = 4;
    p.add(new JLabel("$"),gc);

    gc.gridx = 1;
    gc.gridy = 8;
    p.add(new JLabel("$"),gc);

    gc.gridx = 1;
    gc.gridy = 9;
    p.add(new JLabel("$"),gc);

    gc.gridx = 1;
    gc.gridy = 10;
    p.add(new JLabel("$"),gc);

    //2 column
    gc.gridx = 2;
    gc.gridy = 0;
    p.add(new JTextField(8),gc);

    gc.gridx = 2;
    gc.gridy =1;
    p.add(new JTextField(8),gc);

    gc.gridx = 2;
    gc.gridy = 2;
    p.add(new JTextField(8),gc);

    gc.gridx = 2;
    gc.gridy = 3;
    p.add(new JComboBox(month),gc);

    gc.gridx= 2;
    gc.gridy = 4;
    p.add(new JTextField(8),gc);

    gc.gridx = 2;
    gc.gridy = 8;
    p.add(new JTextField(8),gc);

    gc.gridx = 2;
    gc.gridy = 9;
    p.add(new JTextField(8),gc);

    gc.gridx = 2;
    gc.gridy = 10;
    p.add(new JTextField(8),gc);

    //3 column
    gc.gridx = 3;
    gc.gridy = 1;
    p.add(new JLabel(" years or "),gc);

    gc.gridx = 3;
    gc.gridy = 2;
    p.add(new JLabel(" % per year"),gc);

    gc.gridx = 3;
    gc.gridy = 3;
    p.add(new JComboBox(days),gc);

    gc.gridx = 3;
    gc.gridy = 8;
    p.add(new JLabel("to your monthly mortgage payment"),gc);

    gc.gridx = 3;
    gc.gridy = 9;
    p.add(new JLabel("as an extra yearly mortgage payment every "),gc);

    gc.gridx = 3;
    gc.gridy = 10;
    p.add(new JLabel("as a one-time payment in "),gc);


    //4 column
    gc.gridx = 4;
    gc.gridy = 1;
    p.add(new JTextField(8),gc);

    gc.gridx = 4;
    gc.gridy=3;
    p.add(new JComboBox(years),gc);



    //5 column
    gc.gridx = 5;
    gc.gridy = 1;
    p.add(new JLabel(" months"),gc);

    gc.gridy=5;
    gc.anchor = GridBagConstraints.CENTER;
    p.add(new JButton("Calculate"),gc);


    add(p, BorderLayout.NORTH);





    }



}


对于标签,请尝试使用类似于

//...
gc.anchor = GridBagConstraints.EAST;
add(amount,gc);
//...
gc.anchor = GridBagConstraints.WEST;
add(amountfield, gc);
对于您的字段,请尝试使用类似于

//...
gc.anchor = GridBagConstraints.EAST;
add(amount,gc);
//...
gc.anchor = GridBagConstraints.WEST;
add(amountfield, gc);
anchor
根据剩余可用空间定义组件在其单元内的对齐方式。它也可用于影响组件的垂直定位

有关更多详细信息,请参阅

例如

public class TestPane extends JPanel {

    public TestPane() {
        setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();

        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.anchor = GridBagConstraints.EAST;

        add(new JLabel("Mortage Amount: $"), gbc);
        gbc.gridy++;
        add(new JLabel("Mortage term: "), gbc);
        gbc.gridx += 2;
        add(new JLabel("Years or "), gbc);
        gbc.gridx += 2;
        gbc.anchor = GridBagConstraints.WEST;
        add(new JLabel(" months "), gbc);
        gbc.anchor = GridBagConstraints.EAST;
        gbc.gridx = 0;
        gbc.gridy++;
        add(new JLabel("Interest rate: "), gbc);

        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.anchor = GridBagConstraints.WEST;

        add(new JTextField(10), gbc);
        gbc.gridy++;
        add(new JTextField(10), gbc);
        gbc.gridx += 2;
        add(new JTextField(10), gbc);
        gbc.gridx = 1;
        gbc.gridy++;
        add(new JTextField(10), gbc);
    }

}


当我使用锚定时,定位只是停留在中心位置,是什么原因造成的?您使用的是fill属性吗?我不是,但这会如何影响将JLabel定位到左上角?fill将使组件占据整个单元格(垂直/水平/两者),这使得锚定不相关