java - JFrame 内的 JPanel 背景颜色不起作用

标签 java swing jframe jpanel

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

我在 Main 类中设置了 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 类中设置了 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);
    }
}

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

最佳答案

问题在于您的 JFrame@Override paint 方法(您不应该)。此外,您将其保留为空,而不调用 super 绘制方法。因此,如果您只需将 super.paint(g); 添加到 @Override 中,您将看到背景绘制没有问题。

但是,当您想要进行自定义绘画时,您应该使用 @Override paintComponent(Graphics g) 方法,并再次调用 super.paintComponent (g);.

关于java - JFrame 内的 JPanel 背景颜色不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56096877/

相关文章:

java - 如何从匿名类中获取原始类? java

java - 在单击按钮的框架以外的框架中打开新选项卡

java - 将 JPanel 嵌入框架中

java - Java Applet 中的键盘输入

java - 如何将 800x600 图像放入 jLabel 中,而无需滚动即可查看整个图像

java - 简单 JPA 到 Postgresql 9.1 HibernateEx

java - 模拟注销会引发错误

java - 在 EDT 中只运行一次代码的正确方法是什么?

java - 浏览文件夹对话框

Java 按钮操作命令