我正在尝试做一个非常简单的事情..在我的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);
}
}
我不确定为什么它不能正常工作。
答案 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();
}
}