首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

Java对齐
EN

Stack Overflow用户
提问于 2015-04-20 23:03:16
回答 1查看 1.5K关注 0票数 3

因此,我有我的标签和所有添加,但我仍然有困难的格式化和对齐一切。计算按钮显然应该居中。我知道,使用网格包将框架分割成坐标系,当一列大于另一列时,它会调整另一列,并将其抛出(对吗?)但我不知道怎么解决这个问题。而且仍然很难把所有的东西都对准左边,这样就不会从中间开始。

在这里编译时,窗口

这就是我想要得到的,我还没有添加所有的东西。

代码语言:javascript
复制
 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);





    }



}
EN

回答 1

Stack Overflow用户

发布于 2015-04-22 13:59:59

由于您没有指定调整大小的行为,所以可以使用许多布局管理器来获得非常相似的结果。正如@MadProgrammer所提到的,两个面板可能是一个很好的方法,对于顶部的面板,我将GridBagLayout用于教育目的,而最底层的面板则留给您自己来实现,尽管这个面板不会从GridBagLayout中受益,也可以使用一个更简单的布局管理器(比如BoxLayout)。

代码语言:javascript
复制
public class Mort extends JFrame {

    public static void main(String[] args) {

        new Mort();
    }

    Mort() {

        JPanel topPanel = new JPanel(new GridBagLayout());
        GridBagConstraints gc = new GridBagConstraints();
        JPanel tempPanel;

        gc.anchor = GridBagConstraints.LINE_START;

        // Top
        // 0 Column
        gc.gridx = 0;

        gc.gridy = 0;
        topPanel.add(new JLabel("Mortgage amount:"), gc);

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

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

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

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

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

        gc.gridwidth = 1;
        gc.anchor = GridBagConstraints.LINE_START;

        // 1 Column
        gc.gridx = 1;

        gc.gridy = 0;
        tempPanel = new JPanel();
        tempPanel.add(new JLabel("$"));
        tempPanel.add(new JTextField(8));
        topPanel.add(tempPanel, gc);

        gc.gridy = 1;
        tempPanel = new JPanel();
        tempPanel.add(new JTextField(8));
        tempPanel.add(new JLabel("years of"));
        tempPanel.add(new JTextField(8));
        tempPanel.add(new JLabel("months"));
        topPanel.add(tempPanel, gc);

        gc.gridy = 2;
        tempPanel = new JPanel();
        tempPanel.add(new JTextField(8));
        tempPanel.add(new JLabel("% per year"));
        topPanel.add(tempPanel, gc);

        gc.gridy = 3;
        tempPanel = new JPanel();
        tempPanel.add(new JComboBox());
        tempPanel.add(new JComboBox());
        tempPanel.add(new JComboBox());
        topPanel.add(tempPanel, gc);

        gc.gridy = 4;
        tempPanel = new JPanel();
        tempPanel.add(new JLabel("$"));
        tempPanel.add(new JTextField(8));
        topPanel.add(tempPanel, gc);

        // Bottom
        JPanel bottomPanel = new JPanel();
        bottomPanel.add(new JLabel("BottomPanel"));

        // Main
        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
        mainPanel.add(new JLabel("Mortgage Calculator"));
        mainPanel.add(new JSeparator());
        mainPanel.add(topPanel);
        mainPanel.add(new JSeparator());
        mainPanel.add(bottomPanel);

        getContentPane().add(mainPanel);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }
}

要回答你的具体疑虑:

  • 您错过了行gc.anchor = GridBagConstraints.LINE_START;,它将所有东西按照您的意愿对齐。
  • 超过两个列没有意义,因为只有两个地方需要垂直对齐。
  • “计算”按钮位于列对齐之外(它通过两列居中)。行gc.gridwidth = GridBagConstraints.REMAINDER;意味着它应该跨越(填充)其右侧的其余列,而行gc.anchor = GridBagConstraints.CENTER;则将其对齐到中心。

我留下所有的视觉效果(颜色,字体,垫子,镶嵌等等)。敬你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29759943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档