Цвет фона полноэкранного Java не изменится?

1

У меня есть код, который создает полноэкранный значок в 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
    Попробуйте вызвать setOpaque(true) .
  • 0
    Если значок должен быть размером экрана, где должен быть нарисован фон?
Теги:
swing
jframe
thread-sleep
paint

2 ответа

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

Картина фона выполнена в методе paint(). Ваш метод super.paint(g) и не super.paint(g) поэтому фон никогда не окрашивается.

Однако это НЕ способ делать обычную роспись. Вы НЕ должны переопределять метод paint() для JFrame. Если вы хотите сделать обычную картину, переопределите метод paintComponent() JPanel а затем добавьте панель в фрейм.

Прочтите раздел из учебника Swing по пользовательской живописи для получения дополнительной информации.

Редактировать:

После добавления super.paint(g) будут раскрашены дочерние компоненты кадра. Это означает, что панель содержимого окрашивается, а панель содержимого окрашена над рамкой, поэтому вы не увидите фон кадра, поэтому вам также нужно добавить:

//setBackground(Color.PINK);
getContentPane().setBackground(Color.PINK);
  • 0
    Я уже смотрю учебник, и он работал для него. Это просто дало мне пустой экран!
  • 0
    @ AndrewNeate, and it worked for him - я сомневаюсь в этом именно по той причине, которую я уже дал вам. Хотя мой первоначальный ответ был неполным. Смотрите редактирование. Кроме того, имена классов должны начинаться с заглавной буквы. При размещении кода на форуме соблюдайте соглашения Java.
1

Картина фона выполнена в функции краски. Итак, вы должны вызвать super.paint(g) в начале функции paint.
Кроме того, вам необходимо переопределить функцию 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);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню