簡體   English   中英

Java全屏背景顏色不會改變?

[英]Java full screen background color wont change?

我有一些代碼可以在 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()是在paint()方法中完成的。 您覆蓋了該方法並且沒有調用super.paint(g)所以背景永遠不會被繪制。

但是,這不是進行自定義繪畫的方法。 您不應覆蓋 JFrame 的 paint() 方法。 如果你想要做的風俗畫,然后重寫paintComponent()一個方法JPanel ,然后將面板添加到該幀。

有關更多信息,請閱讀 Swing 教程中關於自定義繪畫的部分。

編輯:

添加 super.paint(g) 后,框架的子組件將被繪制。 這意味着內容窗格被繪制並且內容窗格被繪制在框架上,因此您不會看到框架的背景,因此您還需要添加:

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

背景的繪制是在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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM