JFrame中的背景颜色无法正常工作

时间:2019-05-12 06:52:59

标签: java swing jframe jpanel

我正在尝试做一个非常简单的事情..在我的JFrame内的JPanel上设置背景颜色。我没有用过swing,所以我还在学习。但是,我已经阅读了一些基本的操作,例如设置背景色,而且我不知道为什么我的东西不起作用。

我在JFrame类中设置了Main

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();
    }
}

然后在JPanel类中设置我的Screen

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);
    }
}

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

2 个答案:

答案 0 :(得分:1)

问题是您使用@Override的{​​{1}} paint方法(不应使用)。另外,将其保留为空,而无需调用JFrame绘制方法。因此,如果仅将super添加到super.paint(g);中,您将看到背景绘制没有问题。

但是,当您要进行自定义绘画时,应使用@Override @Override方法,然后再次调用paintComponent(Graphics g)

答案 1 :(得分:0)

我只是运行您的代码,它工作正常。

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

//Add the screen class
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.RED);
    setOpaque(true);
}
}

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.RED);
    setResizable(false);
    setVisible(true);
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}

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

查看输出: enter image description here