# Probleme mit void java.awt.Component.setBackground(Color c)



## OlegO (7. Mrz 2010)

Hallo zusammen, 
das ist mein aller erster Eintrag hier.

Laut Tutorium sollte das Program ein FullScreen Fenster öffnen, mit einem Hintergrund und Text.
Allerdings funktioneiert es mit der HintergrundFarbe nicht(Line 13). Text Farbe wird enstprechend dargestellt, der Hintergrund bleibt immer schwarz. Ich erwarte das der Hintergrund BLAU wird.

Danke für jegliche hilfsreiche Antworten!


```
import java.awt.*;
import javax.swing.JFrame;

public class orange extends JFrame{
	public static void main(String[] args) {
		
		DisplayMode dm = new DisplayMode(800, 600, 16, DisplayMode.REFRESH_RATE_UNKNOWN);
		orange o = new orange();
		o.run(dm);
	}
	
	public void run(DisplayMode dm){
		setBackground(Color.BLUE);
		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){System.out.println("test");}
		}finally{
			s.restoreScreen();
		}
	}
	
	public void paint(Graphics g){
			if(g instanceof Graphics2D){
			Graphics2D g2 = (Graphics2D)g;
			g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
		}
		g.drawString("This is gonna be awesome", 200, 200);
	}

}
```

Screen.java siehe unten

```
import java.awt.*;
import javax.swing.JFrame;

public class Screen {
	//controls video card
	private GraphicsDevice vc;
	
	public Screen(){
		GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
		vc = env.getDefaultScreenDevice();
	}
	
	public void setFullScreen(DisplayMode dm, JFrame window){
		window.setUndecorated(true);//no scroll bar or status bar...
		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();//when close your window, the resources are released
		}
		vc.setFullScreenWindow(null);
	}
}
```


----------



## Marco13 (7. Mrz 2010)

Ich muss zugeben, noch nie mit FullScreen gearbeitet zu haben. Deswegen weiß ich nicht, ob dort irgendwelche ... spezifischen Dinge anders sind als "normalerweise". Aber normalerweise ist es so, dass man nicht die paint-Methode eines JFrames überschreiben sollte. Stattdessen sollte man ein einzelnes JPanel erstellen, das dann in die ContentPane des JFrames legen, und NUR in dem JPanel zeichnen. Dort überschreibt man dann auch paintComponent und nicht paint. 

Hier mal die minimalen Änderungen, die notwendig sind, damit der Hintergrund blau gemalt wird, aber ich vermute(!) dass man lieber in einem eigenen JPanel zeichnen sollte...


```
public void run(DisplayMode dm){
        [b]getContentPane().[/b]setBackground(Color.BLUE);
        setForeground(Color.RED);
      ...
    }

    public void paint(Graphics g){
        [b]super.paint(g); // Der super-Aufruf sollte bei überschriebenen paint*-Methoden immer die erste Zeile sein![/b]
            if(g instanceof Graphics2D){
...
    }
```


----------



## OlegO (7. Mrz 2010)

Marco13 hat gesagt.:


> Ich muss zugeben...



Danke Dir, es hat funktioniert. Ich bin wirklich Anfänger, und um das alles zu verstehen brauche noch Zeit. Danke Dir !!!


----------

