Java 向 JPanel 添加额外的 JPanel

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/913139/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 21:01:09  来源:igfitidea点击:

Adding additional JPanels to a JPanel

javaswingjpanel

提问by Peter C.

Rather basic question here guys.

相当基本的问题,伙计们。

Basically I have code like this:

基本上我有这样的代码:

public SuperPanel() {
    setLayout(new BorderLayout());
    add(panel1(), BorderLayout.NORTH);
    add(panel2(), BorderLayout.CENTER);
    add(panel3(), BorderLayout.SOUTH);
}

And that all works well and good. The problem is that I have another part I wish to add to the center. Just using add(newPanel(), BorderLayout.CENTER)doesn't work, obviously. But you can add JPanels in JPanels, correct?

这一切都很好。问题是我还有另一部分要添加到中心。add(newPanel(), BorderLayout.CENTER)显然,仅仅使用是行不通的。但是您可以在JPanels 中添加JPanels,对吗?

So I made the following change:

所以我做了以下改动:

public SuperPanel() {
    setLayout(new BorderLayout());
    add(panel1(), BorderLayout.NORTH);
    add(supersweetpanel(), BorderLayout.CENTER);
    add(panel3(), BorderLayout.SOUTH);
}

With supersweetpanel()being:

随着supersweetpanel()

public JPanel supersweetpanel() {
    JPanel sswp = new JPanel();
    setLayout(new BorderLayout());
    add(panel2(), BorderLayout.NORTH);
    return sswp;
}

Now it overrides panel1! If I set it to anything else (CENTER, SOUTH, what have you), the first two panels disappear entirely. Help is much appreciated.

现在它覆盖了panel1!如果我将其设置为其他任何内容(CENTER, SOUTH,你有什么),前两个面板将完全消失。非常感谢帮助。

采纳答案by Michael Myers

SuperPanelis likely a subclass of JPanel, right? You are accidentally adding panel2to this(the SuperPanel), not sswp. Try:

SuperPanel很可能是 的子类JPanel,对吗?您不小心添加panel2this(the SuperPanel),而不是sswp. 尝试:

public JPanel supersweetpanel() {
        JPanel sswp = new JPanel();
        sswp.setLayout(new BorderLayout());
        sswp.add(panel2(), BorderLayout.NORTH);
        return sswp;
    }