Java - 如何将组件水平居中并垂直堆叠?

Posted

技术标签:

【中文标题】Java - 如何将组件水平居中并垂直堆叠?【英文标题】:Java - How to center components horizontally, and stack them vertically? 【发布时间】:2021-03-09 23:06:43 【问题描述】:

我正在编写一个应用程序,它将获取用户信息,例如姓名、电子邮件、密码。要获取用户信息,我正在使用 JTextFields。我想让所有组件垂直和水平地位于屏幕中心,并且还让组件一个接一个地堆叠在一起,如下所示:Expected Design

就像您在网站上看到的那样。目前我在 JFrame 中使用 JPanel,JPanel 有一个带有 BoxLayout.Y_AXIS 的 BoxLayout。这是我的代码:

public class RegisterLayout extends Layout 

    @Override
    public void init() 
        this.setBackground(Utilities.babyBlueish);
        this.setBorder(BorderFactory.createTitledBorder("Register Now!"));
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
    

    @Override
    public void addComponents() 
        
        JTextField fName = new JTextField("Enter Your Full Name");
        fName = Utilities.designTextField(fName);
        
        JButton submit = new JButton("Submit");
        submit = Utilities.designButton(submit);
        submit.addActionListener(new ActionListener() 

            @Override
            public void actionPerformed(ActionEvent arg0) 
                
            
            
        );
        
        this.add(fName);
        this.add(submit);
    


当 JPanel 添加到 JFrame 的内容窗格时,init() 和 addComponents() 都会被调用。 “RegisterLayout 扩展布局”和“布局扩展 JPanel”。目前,我的程序代码如下所示:Current Design。如您所见,JTextField 与屏幕水平偏离中心,并且作为一个整体,它没有垂直居中。

如果有人可以提供帮助,我将不胜感激。如果您需要更多详细信息,请告诉我。

【问题讨论】:

你试过vbox了吗? VBox 有一个参数可以将其子元素居中。我认为这是默认开启的。 @NomadMaker 所以我刚试过,我删除了 BoxLayout 注释掉它。然后文本字段向左移动,按钮向右移动,它们仍然位于屏幕顶部,但水平居中。但是我希望按钮位于字段下方,并且它们都位于垂直和水平屏幕的中间。 您正在扩展布局,而不是任何类型的面板。并不是说您应该扩展 JPanel,因为它更容易通过组合来完成。您应该将按钮和文本字段直接放入 VBox,它应该可以工作。您不应该为此扩展 Layout。 @NomadMaker "Layout" 是我创建的扩展 jpanel 的抽象类。我使用这种结构是因为它使用布局处理程序更容易在屏幕布局“JPanel”之间进行处理,这是另一个处理正在显示哪个 jpanel 的类。 【参考方案1】:

这个布局有多种编码方式。这是一种方式。

将 GUI 的各个部分分解为逻辑单元、“一列文本字段”、“表单控件区域”等,然后为每个单元提供一个具有合适布局的容器。

在这个 GUI 模型中:

紫色区域有边框布局,两个绿色区域出现在中心和页尾约束。 顶部的第一个绿色区域将是网格袋布局,用于居中(水平和垂直).. 文本字段的单列网格布局,橙色边框。 第二个绿色边框区域可以是另一种网格袋布局,或者如果只需要水平居中,则可以是流式布局。

可以将合适的边框(例如,不可见的空边框)应用于空白容器。

【讨论】:

我会试试这个,让你知道结果如何。 所以我添加了 3 个新的 JPanel 并将主面板“Purple”布局更改为 GridLayout(2, 1)“2 rows and 1 cols”。第一个绿色面板的布局是 GridBagLayout。它拥有橙色面板,它是一个 GridLayout(4, 1)。橙色面板包含我正在使用的 4 个文本字段。最后一个绿色面板是 FlowLayout。它包含提交按钮。我的应用程序正在查看我的预期结果,感谢 Andrew 的帮助。

以上是关于Java - 如何将组件水平居中并垂直堆叠?的主要内容,如果未能解决你的问题,请参考以下文章

css html 如何将图片img标签 水平居中 垂直居中 和水平垂直居中

-水平居中垂直居中水平垂直居中

绝对定位情况下水平垂直居中小技巧

我如何在乳胶中垂直和水平居中报价?

如何在媒体查询设置的流体布局中垂直和水平居中子元素?

怎么使用CSS让图片水平垂直都居中?