【问题标题】:Background color not working JPanel inside JFrame背景颜色在 JFrame 中不起作用 JPanel
【发布时间】:2019-05-12 06:52:59
【问题描述】:

我正在尝试做一件非常简单的事情.. 在我的 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);
    }
}

我不知道为什么这不能正常工作。

【问题讨论】:

    标签: java swing jframe jpanel


    【解决方案1】:

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

    但是,当你想进行自定义绘画时,你应该使用@OverridepaintComponent(Graphics g) 方法,然后再次调用super.paintComponent(g);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-20
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 2014-09-10
      • 1970-01-01
      • 2014-04-09
      • 1970-01-01
      相关资源
      最近更新 更多