Java全屏背景颜色不会改变?

1 java swing paint jframe thread-sleep

我有一些代码在java中创建一个全屏图标,并将背景颜色设置为粉红色,将前景颜色设置为红色.然而,每次我运行它时,它永远不会将背景颜色更改为红色,只是让它保持透视.我把代码放在下面.

主要java:

import java.awt.*;

import javax.swing.*;

@SuppressWarnings({ "serial" })
public class bob extends JFrame{
    public static void main(String[] args) {

    DisplayMode dm = new DisplayMode(800,600,16, DisplayMode.REFRESH_RATE_UNKNOWN);
    bob b = new bob();
    b.run(dm);
}

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

    screen s = new screen();

    try{
        s.setFullScreen(dm, this);
        try{
            Thread.sleep(5000);
        }catch(Exception ex){}
    }finally{
        s.restoreScreen();
    }
}

public void paint(Graphics g){
    g.drawString("This is gonna be awesome", 200, 200);
}
Run Code Online (Sandbox Code Playgroud)

}

这是屏幕类:

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

public class screen2 {

private GraphicsDevice vc;

public screen2(){

    GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
    vc = env.getDefaultScreenDevice();
}

public void setFullScreen(DisplayMode dm, JFrame window){
    window.setUndecorated(true);
    window.setResizable(false);
    vc.setFullScreenWindow(window);

    if(dm != null && vc.isDisplayChangeSupported()){
        try{
            vc.setDisplayMode(dm);
        }catch(Exception ex){}
    }
}

public Window getFullScreenWindow(){
    return vc.getFullScreenWindow();
}

public void restoreScreen(){
    Window w = vc.getFullScreenWindow();
    if(w != null){
        w.dispose();
    }
    vc.setFullScreenWindow(null);
}
Run Code Online (Sandbox Code Playgroud)

}

有人有主意吗?

cam*_*ckr 5

public void paint(Graphics g){
    g.drawString("This is gonna be awesome", 200, 200);
}
Run Code Online (Sandbox Code Playgroud)

背景的绘画在该paint()方法中完成.你覆盖了方法而没有调用,super.paint(g)所以背景永远不会被绘制.

但是,这不是自定义绘画的方法.您不应该覆盖JFrame的paint()方法.如果要进行自定义绘制,请覆盖a的paintComponent()方法,JPanel然后将面板添加到框架中.

有关详细信息,请阅读自定义绘画的Swing教程中的部分.

编辑:

添加super.paint(g)后,将绘制框架的子组件.这意味着内容窗格被绘制,内容窗格在框架上绘制,因此您将看不到框架的背景,因此您还需要添加:

//setBackground(Color.PINK);
getContentPane().setBackground(Color.PINK);
Run Code Online (Sandbox Code Playgroud)