Swing Java中的BorderLayout无法正常工作

时间:2016-04-06 10:24:53

标签: java swing layout-manager border-layout

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

我的方法如下:

  • 标题为
  • 的1个窗格(顶部/北部)
  • 表单中心的1个窗格
  • 按钮和文本字段的<1>窗格(底部/南部)

这是结果

enter image description here

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

哪里出错?

我的代码:

构造函数(从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 个答案:

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