布局管理器在java中设置此特定布局

我有这个布局,我需要为一个赋值编程,这是我第一次在GUI中使用布局管理器,所以我在设置匹配时遇到问题。 我需要你的帮助

我有两个选项卡标记为帐户创建和帐户转移(这些都没问题)我需要的是将JLabel(帐户ID)和第一个文本字段放在一行中,然后是下一行中的JLabel(Amount)和文本字段第一。 在那之下需要以JButton为中心(创建一个帐户)。 最后,JTextArea(无帐户)需要位于与标签,文本字段和按钮分开的空白区域中的右侧列中。

在此处输入图像描述

这是我开始使用的代码:

public CreatePanel(Vector accountList, TransferPanel transferPanel) { this.accountList = accountList; this.transferPanel = transferPanel; JLabel l1 = new JLabel("Account ID"); JTextField t1 = new JTextField(); JLabel l2 = new JLabel("Amount"); JTextField t2 = new JTextField(); JButton b1 = new JButton("Create an Account"); JTextArea a1 = new JTextArea("No Account"); JPanel panel1 = new JPanel(); panel1.setLayout(new GridLayout(2,3)); panel1.add(l1); panel1.add(t1); panel1.add(l2); panel1.add(t2); panel1.add(b1, BorderLayout.SOUTH); b1.setVerticalAlignment(JLabel.CENTER); JPanel panel2 = new JPanel(); panel2.add(a1); a1.setSize(200, 300); add(panel1); add(panel2); } 

这就是我接近它的方式。 不是将外部面板添加到框架中,而是将其添加到选项卡式窗格的选项卡中。

作业6截图

以上是嵌套或复合布局的示例。 标题边框显示使用的布局和用于构造它们的参数(如果有)。

按钮的大小由内容(文本)建议。 文本字段和文本区域的大小在构造函数中建议(它本身已作为文本值包含在内)。

要在文本字段中获得TALL效果,请设置HUGE字体,但为构造函数使用较少的列。

也可以看看

另一个嵌套布局 。

GridBagLayout是最强大的布局,可用于轻松实现类似网格的显示。 这是一个有n行和m列的布局,其中每个单元格可以在几个方面独立于其他单元格进行定制。 在此布局中,您必须将GridBagConstraints对象作为约束附加到每个panel.add(JComponent, Constraints) 。 在教程中,它明确指出了什么是可自定义的。 它一开始可能看起来有点刺耳,但是一旦掌握了它就很棒了。 它function强大且灵活,您不必担心其他布局可能遇到的无法解释的限制。

在你的布局中,我看到的最不方便的事情就是让“帐户ID”标签的中心与TextField AND对齐,两个空格都是空的。 如果标签与TextField的底部对齐会更容易。 为了解决这个问题,我假设Label和TextField位于我事先构建的面板中,它们正确地对齐(很容易与BorderLayout或GridBagLayout ……或者其他任何东西),我只是将面板放在Layout中。

然后我将此布局视为GridBagLayout,其中包含3行和2列,如下所示:

GridBagLayout行和列

这是我如何使用约束来指定布局中的每个组件的概述

面板1(帐户ID标签+ TextField)

 gridx = 0 gridy = 0 weighty = 0.5 weightx = 0.5 anchor = PAGE_END fill = HORIZONTAL 

第2小组(金额标签+ TextField)

 gridx = 0 gridy = 1 weighty = 0.0 fill = HORIZONTAL 

按键

 gridx = 0 gridy = 2 anchor = PAGE_START weighty = 0.5 

文本区

 gridx = 1 gridy = 0 gridheight = 3 weightx = 0.5 fill = BOTH 

我忽略了一些细节,但核心问题可能会受到这些限制的影响。 关于GridBagLayout最不明显的事情是权GridBagLayout复杂情况下如何工作,例如当同一列中有多个不同的weightx值时会发生什么。 它算上最大值吗? 或者总和?……

为了便于讨论,您可以避免让这些面板使用一个额外的初始行,其中一个不可见的组件的权weighty > 0 ,然后有两列:一个用于JLabel ,另一个用于JTextField ,具有适当的anchor ; 按钮的gridwith = 2 …但这完全不需要,请选择两个辅助面板。