JPanel 在 Java 中未显示在 JFrame 中

JPanel not showing inside JFrame in Java

我知道这个问题已经被问了很多,我已经做了我的研究,但仍然找不到任何东西。下面是在任何人不高兴之前证明这一点的证据:

我找到了这个 link: https://coderanch.com/t/563764/java/Blank-Frame-Panel

还有这个: Adding panels to frame, but not showing when app is run

还有这个: Why shouldn't I call setVisible(true) before adding components?

还有这个: JPanel not showing in JFrame?

但是第一个问题说使用重绘,我试过没有修复,第二个和倒数第三个问题是关于在我添加的组件之后放置 setVisible

最后一个谈到让用户 JPanelArt 成为 JPanel 的扩展(这样做)而不是 JFrame 而不是在框架构造函数中制作框架(也有未完成)

每当我 运行 这个我只是得到一个空白框,就好像从未添加面板一样。

如果我在 link 中遗漏了什么,我深表歉意。不管怎样,下面是我的类:

GUI.java(扩展 JFrame)

package javaapplication2;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class GUI extends JFrame{

public GUI(String name) {
    super(name);

    getContentPane().setLayout(null);

    JPanel myPanel1 = new GUIPanel();
    myPanel1.setLocation(20, 20);
    getContentPane().add(myPanel1);

    setDefaultCloseOperation(EXIT_ON_CLOSE);
    pack();
    setResizable(true);
}

public static void main(String[] args) {
    JFrame frame = new GUI("Game");
    frame.setVisible(true);
}
}

GUIPanel.java(扩展 JPanel)

package javaapplication2;

import java.awt.*;   
import javax.swing.*;


public class GUIPanel extends JPanel {

JButton start;
JButton inspect1;
JButton inspect2;
JButton inspect3;
JButton suspect;

public GUIPanel() {
    setLayout(new BorderLayout());

    start = new JButton("Start Game");
    inspect1 = new JButton("Inspect 1");
    inspect2 = new JButton("Inspect 2");
    inspect3 = new JButton("Inspect 3");
    suspect = new JButton("Choose Suspect");

    add(start, BorderLayout.WEST);
    add(inspect1, BorderLayout.WEST);
    add(inspect2, BorderLayout.WEST);
    add(inspect3, BorderLayout.WEST);
    add(suspect, BorderLayout.WEST);

}
}

我知道这很简单,但那是因为我正在按照我的讲师的教程来掌握一些东西,因为我以前使用过一个 GUI 生成器,这个社区中有人向我指出它不适合开始于(非常正确!)

问题出在您调用 getContentPane().setLayout(null)GUI class。由于此方法调用,您的 JFrame 未显示任何内容。如果删除它,您的元素应该会显示。

我还注意到您将每个 JButton 设置为具有 BorderLayout.WEST 的约束。这很可能会将您的 JButton 放在彼此之上并仅呈现其中一个。