我已经在Java中创建了一个密码生成器,它可以完美运行。我的功能正在运行(经过大量的眼泪,汗水和血:)),但是唯一的问题仍然是GUI的布局。

我的方法如下:


1个标题窗格(顶部/北部)
表单中央有1个窗格
1个窗格(底部/底部),用于按钮和文本字段


这是结果

java - Swing Java中的BorderLayout无法正常工作-LMLPHP

如您所见,这不是我想要的。但是,如果我看一下我的代码,应该将其从上到下很好地放置。

哪里出错了?

我的代码:

构造函数(从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;
}

最佳答案

您忘记了在BorderLayout上将LayoutManager设置为ContentPane。仅使用正确的约束是不够的。您可以为此使用ContentPane.setLayoutManager(),也可以直接在LayoutManager的构造函数中给出JPanel

10-07 18:12