我有一些代码可以在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);
}
}
有人有什么想法吗?
答案 0 :(得分:5)
public void paint(Graphics g){
g.drawString("This is gonna be awesome", 200, 200);
}
背景的绘画是在paint()
方法中完成的。你覆盖了这个方法并且没有调用super.paint(g)
所以背景永远不会被绘制。
但是,这不是自定义绘画的方法。您不应该覆盖JFrame的paint()方法。如果您想进行自定义绘画,请覆盖paintComponent()
的{{1}}方法,然后将面板添加到框架中。
阅读Custom Painting上的Swing教程中的部分以获取更多信息。
编辑:
添加super.paint(g)后,将绘制框架的子组件。这意味着内容窗格被绘制,内容窗格在框架上绘制,因此您不会看到框架的背景,因此您还需要添加:
JPanel
答案 1 :(得分:1)
背景的绘画在绘画功能中完成。因此,您必须在绘制函数的开头调用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);
}