首页 文章

Swing Java中的BorderLayout无法正常工作

提问于
浏览
0

我用Java创建了一个完美的密码生成器 . 我的功能正在工作(经过大量的眼泪,汗水和血液:)),但唯一的问题仍然是我的GUI布局 .

我的方法如下:

Headers 的

  • 1窗格(顶部/北部)

  • 1窗格位于表单的中心

  • 1窗格(底部/南部)用于按钮和文本字段

这是结果

enter image description here

你可以看到这不是我想要的 . 但是,如果我查看我的代码,它应该从上到下很好地放置 .

哪里出错了?

我的代码:

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 回答

  • 2

    您忘记在 ContentPane 上将 BorderLayout 设置为 LayoutManager . 仅使用正确的约束是不够的 . 您可以使用 ContentPane.setLayoutManager() ,或者直接在 JPanel 的构造函数中提供 LayoutManager .

  • 3

    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;
            }
    

相关问题