在添加paint方法之前,背景起作用了,我假设paint方法在运行时会覆盖setBackground和setForeground方法,但是我不确定如何解决此问题。

import java.awt.Color;
import java.awt.DisplayMode;
import java.awt.Font;
import java.awt.Graphics;

import javax.swing.JFrame;

public class Afterworld extends JFrame{
    public static void main(String[] args){
        DisplayMode dm = new DisplayMode(800, 600, 16, DisplayMode.REFRESH_RATE_UNKNOWN);
        Afterworld game = new Afterworld();
        game.run(dm);
    }

    public void run(DisplayMode dm){
        setBackground(Color.PINK);
        setForeground(Color.WHITE);
        setFont(new Font("Arial", Font.PLAIN, 24));

        Screen screen = new Screen();
        try{
            screen.setFullScreen(dm, this);
            try{
                Thread.sleep(5000);
            }catch(Exception ex){}
        }finally{
            screen.restoreScreen();
        }
    }

    public void paint(Graphics g){
        g.drawString("test", 200, 200);
    }
}

最佳答案

您应该将paint方法更改为:

public void paint(Graphics g){
    super.paint(g);
    g.drawString("test", 200, 200);
}


super.paint(g);的调用将执行超类中的所有代码。这正是添加paint方法之前绘制背景的代码。

您可以在http://docs.oracle.com/javase/tutorial/java/IandI/super.html上了解有关访问超类成员的更多信息。

10-07 19:07
查看更多