背景颜色在 JFrame 中不起作用 JPanel

Background color not working JPanel inside JFrame

我正在尝试做一件非常简单的事情.. 在我的 JFrame 内的 JPanel 上设置背景颜色。我没怎么用过 swing 所以我还在学习中。但是,我已经阅读了很多关于设置背景颜色等基本操作的内容,但我不知道为什么我的设置不起作用。

我在 Main class 中设置了 JFrame

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class Main extends JFrame {
    private static Screen screen;
    private static int WIDTH = 600;
    private static int HEIGHT = 600;

    public Main() {
        screen = new Screen();
        setTitle("Asteroid");
        setSize(WIDTH, HEIGHT);
        setLayout(new BorderLayout());
        add(screen, BorderLayout.CENTER);
        setBackground(Color.BLACK);
        setResizable(false);
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    @Override
    public void paint(Graphics g) {
    }

    public static void main(String[] args) {
        new Main();
    }
}

然后我在 Screen class

中设置了我的 JPanel
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JPanel;

public class Screen extends JPanel {
    private static int WIDTH = 600;
    private static int HEIGHT = 600;
    private Dimension screen = new Dimension(WIDTH, HEIGHT);

    public Screen() {
        setSize(screen);
        setBackground(Color.BLACK);
        setOpaque(true);
    }
}

我不确定为什么这不能正常工作。

问题是您 @Override paint 方法(您不应该)使用 JFrame。此外,您将其留空,而不调用 super 绘制方法。因此,如果您简单地将 super.paint(g); 添加到 @Override 中,您将看到背景绘制没有问题。

然而,当你想做自定义绘画时,你应该@OverridepaintComponent(Graphics g)方法,再次调用super.paintComponent(g);