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!
Java:
importjava.awt.*;importjavax.swing.JFrame;publicclass orange extendsJFrame{publicstaticvoidmain(String[] args){DisplayMode dm =newDisplayMode(800,600,16,DisplayMode.REFRESH_RATE_UNKNOWN);
orange o =neworange();
o.run(dm);}publicvoidrun(DisplayMode dm){setBackground(Color.BLUE);setForeground(Color.RED);setFont(newFont("Arial",Font.PLAIN,24));Screen s =newScreen();try{
s.setFullScreen(dm,this);try{Thread.sleep(5000);}catch(Exception ex){System.out.println("test");}}finally{
s.restoreScreen();}}publicvoidpaint(Graphics g){if(g instanceofGraphics2D){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
Java:
importjava.awt.*;importjavax.swing.JFrame;publicclassScreen{//controls video cardprivateGraphicsDevice vc;publicScreen(){GraphicsEnvironment env =GraphicsEnvironment.getLocalGraphicsEnvironment();
vc = env.getDefaultScreenDevice();}publicvoidsetFullScreen(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){}}}publicWindowgetFullScreenWindow(){return vc.getFullScreenWindow();}publicvoidrestoreScreen(){Window w = vc.getFullScreenWindow();if(w !=null){
w.dispose();//when close your window, the resources are released}
vc.setFullScreenWindow(null);}}
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...
Code:
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){
...
}