繁体   English   中英

Swing Java中的BorderLayout无法正常工作

[英]BorderLayout in Swing Java not working correctly

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

我的方法如下:

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

这是结果

在此处输入图片说明

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

哪里出错了?

我的代码:

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

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

JPanel的默认布局管理器是FlowLayout Manager。 要使用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;
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM