Swing Java 中的 BorderLayout 无法正常工作
BorderLayout in Swing Java not working correctly
我在 Java 中创建了一个密码生成器,它运行良好。我的功能正常(经过大量的眼泪、汗水和鲜血 :)),但唯一剩下的问题是我的 GUI 布局。
我的方法如下:
- 标题有 1 个窗格(Top/North)
- 表单中央有 1 个窗格
- 1 个窗格 (bottom/south) 用于按钮和文本字段
这是结果
如您所见,这不是我想要的。但是如果我查看我的代码,它应该从上到下很好地放置。
哪里出错了?
我的代码:
构造函数(从 JFrame 扩展)
public PasswordGenerator(){
this.setContentPane(ContentPane());
this.setSize(500,270);
this.setResizable(true);
this.setVisible(true);
}
窗格:
private JPanel ContentPane()
{
JPanel ContentPane = new JPanel();
ContentPane.add(getTopPane(), BorderLayout.NORTH);
ContentPane.add(getCenterPane(),BorderLayout.CENTER);
ContentPane.add(getSouthPane(),BorderLayout.EAST);
return ContentPane;
}
private JPanel getTopPane(){
JPanel TopPane = new JPanel();
JLabel intro = new JLabel("Password generator V1.0");
intro.setFont(new Font("TimesRoman",Font.BOLD,20));
TopPane.setLayout(new GridLayout(1,1));
TopPane.add(intro);
return TopPane;
}
private JPanel getCenterPane(){
JPanel CenterPane = new JPanel();
CenterPane.add(aantalChars);
CenterPane.setLayout(new GridLayout(6,3));
//8,2
hidden.setVisible(false);
hiddenL.setVisible(false);
CenterPane.add(aantalCharsLabel);
CenterPane.add(hidden);
CenterPane.add(hidden);
CenterPane.add(hiddenL);
CenterPane.add(lowerCase);
CenterPane.add(lowerCaseLabel);
CenterPane.add(upperCase);
CenterPane.add(upperCaseLabel);
CenterPane.add(numberCase);
CenterPane.add(numberCaseLabel);
CenterPane.add(symbolCase);
CenterPane.add(symbolCaseLabel);
return CenterPane;
}
您忘记在 ContentPane
上将 BorderLayout
设置为 LayoutManager
。仅仅使用正确的约束是不够的。您可以为此使用 ContentPane.setLayoutManager()
,或者您可以直接在 JPanel
.
的构造函数中给出 LayoutManager
JPanel 的默认布局管理器是 FlowLayout 管理器。
要使用 BorederLayout,您需要专门设置它:
private JPanel ContentPane()
{
JPanel ContentPane = new JPanel();
//////////////////////////////////////////////
ContentPane.setLayout(new BorderLayout());
////////////////////////////////////////////
ContentPane.add(getTopPane(), BorderLayout.NORTH);
ContentPane.add(getCenterPane(),BorderLayout.CENTER);
ContentPane.add(getSouthPane(),BorderLayout.SOUTH);
return ContentPane;
}
我在 Java 中创建了一个密码生成器,它运行良好。我的功能正常(经过大量的眼泪、汗水和鲜血 :)),但唯一剩下的问题是我的 GUI 布局。
我的方法如下:
- 标题有 1 个窗格(Top/North)
- 表单中央有 1 个窗格
- 1 个窗格 (bottom/south) 用于按钮和文本字段
这是结果
如您所见,这不是我想要的。但是如果我查看我的代码,它应该从上到下很好地放置。
哪里出错了?
我的代码:
构造函数(从 JFrame 扩展)
public PasswordGenerator(){
this.setContentPane(ContentPane());
this.setSize(500,270);
this.setResizable(true);
this.setVisible(true);
}
窗格:
private JPanel ContentPane()
{
JPanel ContentPane = new JPanel();
ContentPane.add(getTopPane(), BorderLayout.NORTH);
ContentPane.add(getCenterPane(),BorderLayout.CENTER);
ContentPane.add(getSouthPane(),BorderLayout.EAST);
return ContentPane;
}
private JPanel getTopPane(){
JPanel TopPane = new JPanel();
JLabel intro = new JLabel("Password generator V1.0");
intro.setFont(new Font("TimesRoman",Font.BOLD,20));
TopPane.setLayout(new GridLayout(1,1));
TopPane.add(intro);
return TopPane;
}
private JPanel getCenterPane(){
JPanel CenterPane = new JPanel();
CenterPane.add(aantalChars);
CenterPane.setLayout(new GridLayout(6,3));
//8,2
hidden.setVisible(false);
hiddenL.setVisible(false);
CenterPane.add(aantalCharsLabel);
CenterPane.add(hidden);
CenterPane.add(hidden);
CenterPane.add(hiddenL);
CenterPane.add(lowerCase);
CenterPane.add(lowerCaseLabel);
CenterPane.add(upperCase);
CenterPane.add(upperCaseLabel);
CenterPane.add(numberCase);
CenterPane.add(numberCaseLabel);
CenterPane.add(symbolCase);
CenterPane.add(symbolCaseLabel);
return CenterPane;
}
您忘记在 ContentPane
上将 BorderLayout
设置为 LayoutManager
。仅仅使用正确的约束是不够的。您可以为此使用 ContentPane.setLayoutManager()
,或者您可以直接在 JPanel
.
LayoutManager
JPanel 的默认布局管理器是 FlowLayout 管理器。 要使用 BorederLayout,您需要专门设置它:
private JPanel ContentPane()
{
JPanel ContentPane = new JPanel();
//////////////////////////////////////////////
ContentPane.setLayout(new BorderLayout());
////////////////////////////////////////////
ContentPane.add(getTopPane(), BorderLayout.NORTH);
ContentPane.add(getCenterPane(),BorderLayout.CENTER);
ContentPane.add(getSouthPane(),BorderLayout.SOUTH);
return ContentPane;
}