Цвет фона не работает JPanel внутри JFrame - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь сделать очень простую вещь ... установить цвет фона на JPanel внутри моего JFrame.Я не использовал 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);
    }
}

Я не уверен, почему это не работает должным образом.

1 Ответ

1 голос
/ 12 мая 2019

Проблема в том, что вы @Override paint метод (вы не должны) вашего JFrame.Кроме того, вы оставляете его пустым, не вызывая метод рисования super.Так что, если вы просто добавите super.paint(g); к вашему @Override, вы увидите, что фон нарисован без проблем.

Однако, если вы хотите сделать пользовательское рисование, вы должны @Override paintComponent(Graphics g) метод,и снова начните с вызова super.paintComponent(g);.

...