我在Java中创建了一个完美的密码生成器。我的功能正在工作(经过大量的眼泪,汗水和血液:)),但唯一的问题仍然是我的GUI布局。
我的方法如下:
这是结果
你可以看到这不是我想要的。但是,如果我查看我的代码,它应该从上到下很好地放置。
哪里出错?
我的代码:
构造函数(从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;
}
答案 0 :(得分:3)
您忘记在BorderLayout
上将LayoutManager
设置为ContentPane
。仅使用正确的约束是不够的。您可以使用ContentPane.setLayoutManager()
,或者直接在LayoutManager
的构造函数中提供JPanel
。
答案 1 :(得分:2)
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;
}