jpanel 无法制作 7 行 2 列的网格布局
jpanel cannot make gridlayout with 7 rows and 2 cols
我想问一下我的代码是否有问题。我用 borderlayout
设置了我的框架。在中心部分,我想使用 gridlayout
其中有 7 行和 2 列。
paneltengah= new JPanel();
paneltengah.setLayout(new GridLayout(7,2));
labelname = new JLabel(lbl_name,SwingConstants.LEFT);
labelusername = new JLabel(lbl_username,SwingConstants.LEFT);
labelpassword = new JLabel(lbl_password,SwingConstants.LEFT);
labelgender = new JLabel(lbl_gender,SwingConstants.LEFT);
labelemail = new JLabel(lbl_email,SwingConstants.LEFT);
labelhobby = new JLabel(lbl_hobby,SwingConstants.LEFT);
labelrole = new JLabel(lbl_role,SwingConstants.LEFT);
textname = new JTextField(20);
textusername = new JTextField(20);
textpassword = new JPasswordField(20);
textemail = new JTextField(20);
comboboxhobby = new JComboBox();
comboboxrole = new JComboBox();
radiobuttonmale = new JRadioButton("Male");
radiobuttonfemale = new JRadioButton("Female");
ButtonGroup btngroup = new ButtonGroup();
btngroup.add(radiobuttonmale);
btngroup.add(radiobuttonfemale);
paneltengah.add(labelname);
paneltengah.add(labelusername);
paneltengah.add(labelpassword);
paneltengah.add(labelgender);
paneltengah.add(labelemail);
paneltengah.add(labelrole);
paneltengah.add(labelhobby);
//// paneltengah.add(textname); when i open this, the layout become awkward
//// paneltengah.add(textusername);
//// paneltengah.add(textpassword);
//// paneltengah.add(radiobuttonmale);
//// paneltengah.add(radiobuttonfemale);
//// paneltengah.add(comboboxhobby);
//// paneltengah.add(comboboxrole);
pane.add(paneltengah, BorderLayout.CENTER);
以下图片未打开评论显示
下图显示取消注释
我的代码有什么问题?
首先,GridLayout
在其关联的 Container
中均匀地调整所有组件的大小,这解释了为什么您的标签和字段大小相同。例如,如果您的 JPanel
中有一个 JTextArea
200 列 × 20 行,那么即使是最小的标签也会占用这么大的一个 space!
接下来,根据 GridLayout
Javadoc,当 GridLayout
实例使用两个 non-zero 参数构造时,行数固定,行数列数根据放入 parent Container
.
的组件数进行调整
我的建议是使用 BorderLayout
来设置主窗体布局。将您的标题放在 NORTH
并保留标签和字段的 CENTER
(您当前的 JPanel
)。
对于您的标签和字段,最简单的解决方案可能是使用 GridLayout(0, 2)
(固定列数)。但是您的所有组件的大小仍然相同。
如果您需要更好地控制组件的大小(例如,字段比标签宽),那么我建议使用另一个布局管理器,例如 GridBagLayout
。我知道管理起来更复杂,但使用 GridBagLayout
格式预览实用程序应该会有所帮助。这样的程序可以命名为 GridBagLab
(我知道 David Geary 的书 Graphic Java 第 2 卷 — Swing 在其配套 CD 上有一个)。
https://www.youtube.com/watch?v=Ts5fsHXIuvI 上还有一个 GridBagLayout
教程。
我想问一下我的代码是否有问题。我用 borderlayout
设置了我的框架。在中心部分,我想使用 gridlayout
其中有 7 行和 2 列。
paneltengah= new JPanel();
paneltengah.setLayout(new GridLayout(7,2));
labelname = new JLabel(lbl_name,SwingConstants.LEFT);
labelusername = new JLabel(lbl_username,SwingConstants.LEFT);
labelpassword = new JLabel(lbl_password,SwingConstants.LEFT);
labelgender = new JLabel(lbl_gender,SwingConstants.LEFT);
labelemail = new JLabel(lbl_email,SwingConstants.LEFT);
labelhobby = new JLabel(lbl_hobby,SwingConstants.LEFT);
labelrole = new JLabel(lbl_role,SwingConstants.LEFT);
textname = new JTextField(20);
textusername = new JTextField(20);
textpassword = new JPasswordField(20);
textemail = new JTextField(20);
comboboxhobby = new JComboBox();
comboboxrole = new JComboBox();
radiobuttonmale = new JRadioButton("Male");
radiobuttonfemale = new JRadioButton("Female");
ButtonGroup btngroup = new ButtonGroup();
btngroup.add(radiobuttonmale);
btngroup.add(radiobuttonfemale);
paneltengah.add(labelname);
paneltengah.add(labelusername);
paneltengah.add(labelpassword);
paneltengah.add(labelgender);
paneltengah.add(labelemail);
paneltengah.add(labelrole);
paneltengah.add(labelhobby);
//// paneltengah.add(textname); when i open this, the layout become awkward
//// paneltengah.add(textusername);
//// paneltengah.add(textpassword);
//// paneltengah.add(radiobuttonmale);
//// paneltengah.add(radiobuttonfemale);
//// paneltengah.add(comboboxhobby);
//// paneltengah.add(comboboxrole);
pane.add(paneltengah, BorderLayout.CENTER);
以下图片未打开评论显示
下图显示取消注释
我的代码有什么问题?
首先,GridLayout
在其关联的 Container
中均匀地调整所有组件的大小,这解释了为什么您的标签和字段大小相同。例如,如果您的 JPanel
中有一个 JTextArea
200 列 × 20 行,那么即使是最小的标签也会占用这么大的一个 space!
接下来,根据 GridLayout
Javadoc,当 GridLayout
实例使用两个 non-zero 参数构造时,行数固定,行数列数根据放入 parent Container
.
我的建议是使用 BorderLayout
来设置主窗体布局。将您的标题放在 NORTH
并保留标签和字段的 CENTER
(您当前的 JPanel
)。
对于您的标签和字段,最简单的解决方案可能是使用 GridLayout(0, 2)
(固定列数)。但是您的所有组件的大小仍然相同。
如果您需要更好地控制组件的大小(例如,字段比标签宽),那么我建议使用另一个布局管理器,例如 GridBagLayout
。我知道管理起来更复杂,但使用 GridBagLayout
格式预览实用程序应该会有所帮助。这样的程序可以命名为 GridBagLab
(我知道 David Geary 的书 Graphic Java 第 2 卷 — Swing 在其配套 CD 上有一个)。
https://www.youtube.com/watch?v=Ts5fsHXIuvI 上还有一个 GridBagLayout
教程。