2015-03-22 3 views
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

Try вызова 'setOpaque (истина)'. –

+0

Если значок должен быть размером экрана, где должен быть нарисован фон? – MeetTitan

ответ

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

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

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

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

Edit:

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

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

Я уже смотрю учебник, и это сработало для него. Это просто дало мне пустой экран! –

+0

@ AndrewNeate, 'и это сработало для него' - я сомневаюсь, что именно по этой причине я вам уже дал. Хотя мой первоначальный ответ был неполным. См. Редактирование. Кроме того, имена классов должны начинаться с символа верхнего регистра. Следуйте соглашениям Java при отправке кода на форуме. – camickr

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); 
} 
Смежные вопросы