我用Java创建了一个完美的密码生成器 . 我的功能正在工作(经过大量的眼泪,汗水和血液:)),但唯一的问题仍然是我的GUI布局 .
我的方法如下:
Headers 的
-
1窗格(顶部/北部)
-
1窗格位于表单的中心
-
1窗格(底部/南部)用于按钮和文本字段
这是结果
你可以看到这不是我想要的 . 但是,如果我查看我的代码,它应该从上到下很好地放置 .
哪里出错了?
我的代码:
constructor (从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;
}
2 回答
您忘记在
ContentPane
上将BorderLayout
设置为LayoutManager
. 仅使用正确的约束是不够的 . 您可以使用ContentPane.setLayoutManager()
,或者直接在JPanel
的构造函数中提供LayoutManager
.JPanel的默认布局管理器是FlowLayout管理器 . 要使用BorederLayout,您需要专门设置它: