如何将 GUI 组件放置在 java 的中央?
How to place GUI components in java in the center?
我正在尝试创建一个迷你表单,它应该看起来像这样:
到目前为止我得到了这个:
问题是我需要从左边有这个空隙,这样我的表格就会居中,但我不知道如何实现。
我的代码:
public class Person extends ClubAbstractEntity
{
protected String id;
protected String name;
protected String surname;
protected String tel;
public Person(String id,String name,String surname,String tel)
{
this.id=id;
this.name=name;
this.surname=surname;
this.tel=tel;
JLabel[] labels={new JLabel("Id", JLabel.RIGHT),new JLabel("Name", JLabel.RIGHT),new JLabel("Surname", JLabel.RIGHT),new JLabel("Tel", JLabel.RIGHT)};
JTextField[] textFields=new JTextField[labels.length];
JPanel container=new JPanel();
container.setLayout(new BorderLayout());
JPanel labelPanel = new JPanel(new GridLayout(labels.length, 1));
JPanel fieldPanel = new JPanel(new GridLayout(labels.length, 1));
container.add(labelPanel, BorderLayout.WEST);
container.add(fieldPanel, BorderLayout.CENTER);
for(int i=0;i<labels.length;i++)
{
//container.add(labels[i]);
textFields[i]=new JTextField(30);
labels[i].setLabelFor(textFields[i]);
labelPanel.add(labels[i]);
JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT));
p.add(textFields[i]);
fieldPanel.add(p);
//container.add(textFields[i]);
}
setSize(450,220);
addToCenter(container);
}
它使用名为 addToCenter
的父方法(一个 class 扩展 JFrame
)方法,它获取一个 GUI 组件并将其添加到中心。
protected void addToCenter(Component guiComponent)
{
add(guiComponent,BorderLayout.CENTER);
}
最简单的方法是使用包装面板,该面板使用 GridBagLayout
和默认 GridBagConstraints
。
//addToCenter(container);
JPanel wrapper = new JPanel( new GridBagLayout() );
wrapper.add(container, new GridBagConstraints());
addToCenter(wrapper);
现在,“容器”面板将位于“包装器”面板的中心,并且包装器面板将填充框架中所有可用的 space。阅读 How to Use GridBagLayout
上的 Swing 教程部分
有关使用 weightx/weighty 约束的部分将解释其工作原理。
编辑:
另一种选择是在父面板上使用 Border
。 Border 允许您保留 space 或向组件添加高亮显示。在这种情况下,您可以使用 EmptyBorder
。阅读有关 How to Use Borders 的 Swing 教程部分,了解更多信息和示例。
这两种解决方案的不同之处在于,边框是固定尺寸的,如果框架不可调整大小,它也能正常工作。如果框架可调整大小,则“包装器”面板解决方案效果很好,因为随着框架调整大小时,面板将持续居中 space 可用。
我正在尝试创建一个迷你表单,它应该看起来像这样:
到目前为止我得到了这个:
问题是我需要从左边有这个空隙,这样我的表格就会居中,但我不知道如何实现。
我的代码:
public class Person extends ClubAbstractEntity
{
protected String id;
protected String name;
protected String surname;
protected String tel;
public Person(String id,String name,String surname,String tel)
{
this.id=id;
this.name=name;
this.surname=surname;
this.tel=tel;
JLabel[] labels={new JLabel("Id", JLabel.RIGHT),new JLabel("Name", JLabel.RIGHT),new JLabel("Surname", JLabel.RIGHT),new JLabel("Tel", JLabel.RIGHT)};
JTextField[] textFields=new JTextField[labels.length];
JPanel container=new JPanel();
container.setLayout(new BorderLayout());
JPanel labelPanel = new JPanel(new GridLayout(labels.length, 1));
JPanel fieldPanel = new JPanel(new GridLayout(labels.length, 1));
container.add(labelPanel, BorderLayout.WEST);
container.add(fieldPanel, BorderLayout.CENTER);
for(int i=0;i<labels.length;i++)
{
//container.add(labels[i]);
textFields[i]=new JTextField(30);
labels[i].setLabelFor(textFields[i]);
labelPanel.add(labels[i]);
JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT));
p.add(textFields[i]);
fieldPanel.add(p);
//container.add(textFields[i]);
}
setSize(450,220);
addToCenter(container);
}
它使用名为 addToCenter
的父方法(一个 class 扩展 JFrame
)方法,它获取一个 GUI 组件并将其添加到中心。
protected void addToCenter(Component guiComponent)
{
add(guiComponent,BorderLayout.CENTER);
}
最简单的方法是使用包装面板,该面板使用 GridBagLayout
和默认 GridBagConstraints
。
//addToCenter(container);
JPanel wrapper = new JPanel( new GridBagLayout() );
wrapper.add(container, new GridBagConstraints());
addToCenter(wrapper);
现在,“容器”面板将位于“包装器”面板的中心,并且包装器面板将填充框架中所有可用的 space。阅读 How to Use GridBagLayout
上的 Swing 教程部分有关使用 weightx/weighty 约束的部分将解释其工作原理。
编辑:
另一种选择是在父面板上使用 Border
。 Border 允许您保留 space 或向组件添加高亮显示。在这种情况下,您可以使用 EmptyBorder
。阅读有关 How to Use Borders 的 Swing 教程部分,了解更多信息和示例。
这两种解决方案的不同之处在于,边框是固定尺寸的,如果框架不可调整大小,它也能正常工作。如果框架可调整大小,则“包装器”面板解决方案效果很好,因为随着框架调整大小时,面板将持续居中 space 可用。