【发布时间】:2015-08-01 19:36:07
【问题描述】:
我有以下代码。但我希望所有组件都出现在 JPanel 的中心。我已经为此花费了无数个小时,但每次都失败了。有人可以帮忙吗?
package tg.com.bugtracker;
import java.awt.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class LoginPanel extends JPanel {
LoginPanel() {
GridBagLayout layout = new GridBagLayout();
setLayout(layout);
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 0;
constraints.anchor = GridBagConstraints.LAST_LINE_END;
add(new JLabel("Username"), constraints);
constraints.gridx = 1;
constraints.gridy = 0;
constraints.anchor = GridBagConstraints.LAST_LINE_START;
JComboBox<String> combobox = new JComboBox<>();
combobox.setPreferredSize(new Dimension(250, 20));
add(combobox, constraints);
constraints.gridx = 0;
constraints.gridy = 1;
constraints.anchor = GridBagConstraints.FIRST_LINE_END;
add(new JLabel("Password"), constraints);
constraints.gridx = 1;
constraints.gridy = 1;
constraints.anchor = GridBagConstraints.FIRST_LINE_END;
JTextField textfield = new JTextField();
textfield.setPreferredSize(new Dimension(250, 20));
add(textfield, constraints);
}
}
【问题讨论】:
-
所以布局不符合您的预期?它不显示在中心。代码对我来说看起来不错..
-
将一组组件置于 GUI 区域中心的一种相当简单的方法是将它们布置在面板中并使用
GridBagLayout创建一个(或另一个)面板。然后将带有组件的面板作为一个没有约束的单个组件放入 GBL。任务完成! -
他们处于中心位置,但不是任何人所期望的。您知道任何应用程序的登录页面的外观吗?就在整个面板的中心!我迷路了。我正在尝试 setBounds(),看看是否有效。
-
顺便说一句,当我创建该代码的MCVE(最小完整可验证示例)时,我将
LoginPanel的一个实例放入BorderLayout的CENTER中,它肯定似乎是居中的。另请参阅Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?(是。)文本字段的大小可以通过列数和字体大小来建议。组合框将采用内容的大小,这归结为最宽的组合项和使用的渲染器。 -
“我正在尝试 setBounds(),我会看看它是否有效。” 把它从我这里拿走。它不会。或者即使它以默认大小在您的系统上工作,在调整大小后它也将无法工作,并且也可能在其他系统上失败(从一开始)。
标签: java swing jpanel layout-manager gridbaglayout