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 - 如何将组件水平居中并垂直堆叠?的主要内容,如果未能解决你的问题,请参考以下文章