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

我有一些代码在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); } 

}

这是屏幕类:

 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); } 

}

有人有主意吗?

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

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

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

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

编辑:

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

 //setBackground(Color.PINK); getContentPane().setBackground(Color.PINK); 

背景的绘画是在绘画function中完成的。 所以,你必须在paint函数的开头调用super.paint(g)
此外,您需要覆盖setBackground函数。
所以代码变成:

 public void paint(Graphics g){ super.paint(g); g.drawString("This is gonna be awesome", 200, 200); } public void setBackground(Color color){ super.setBackground(color); getContentPane().setBackground(color); }