swing - Background Color in Java Graphics 2D is always black color -


*i'm trying print background in pink color , text in white color. text color change screen in black color. *

import java.awt.*; import javax.swing.jframe;  public class screen { private graphicsdevice vc;  public screen(){     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 void restorescreen(){     window w=vc.getfullscreenwindow();     if(w!=null ){         w.dispose();     }     vc.setfullscreenwindow(null); }   } 

now main method :

import javax.swing.jframe; import java.awt.*; public class myguimain extends jframe { public static void main(string arg[]){       // screen.java      displaymode dm = new displaymode(800,600,16,displaymode.refresh_rate_unknown);     myguimain m = new myguimain();     m.run(dm); }  public void run(displaymode dm){      setforeground(color.white);     setbackground(color.pink);     setfont(new font("arial",font.plain,25));      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 gonna awesome",200,200);  } } 

result:

enter image description here

i have been searching on internet end nothing. if can resolve issue, in advance.

problem #1: extending jframe. discouraged locks single use case (you can't add frame else), besides, you're not adding new functionality class. better create instance when need it

problem #2: overriding paint of top level container (jframe). discouraged number of reasons: it's easy break paint chain (which you've done); it's not double buffered (say hello flickering updates); child components can painted without requiring parent container repainted (hello weird paint updates , artificates).

better create custom class, extending jpanel , override it's paintcomponent method , perform custom painting there (and call super.paintcomponent before custom painting)

see painting in awt , swing , performing custom painting more details

something like...

painting

import java.awt.color; import java.awt.dimension; import java.awt.displaymode; import java.awt.eventqueue; import java.awt.font; import java.awt.graphics; import java.awt.graphics2d; import java.awt.graphicsdevice; import java.awt.graphicsenvironment; import java.awt.window; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.uimanager; import javax.swing.unsupportedlookandfeelexception;  public class myguimain {      public static void main(string arg[]) {         new myguimain();     }      public myguimain() {         eventqueue.invokelater(new runnable() {             @override             public void run() {                 try {                     uimanager.setlookandfeel(uimanager.getsystemlookandfeelclassname());                 } catch (classnotfoundexception | instantiationexception | illegalaccessexception | unsupportedlookandfeelexception ex) {                     ex.printstacktrace();                 }                  jframe frame = new jframe("testing");                 frame.setdefaultcloseoperation(jframe.exit_on_close);                 frame.add(new testpane());                 frame.pack();                 frame.setlocationrelativeto(null);                 frame.setvisible(true);                  displaymode dm = new displaymode(800, 600, 16, displaymode.refresh_rate_unknown);                 try {                     screen.setfullscreen(dm, frame);                     try {                         thread.sleep(5000);                     } catch (exception ex) {                      }                 } {                     screen.restorescreen();                 }             }         });     }      public class testpane extends jpanel {          public testpane() {             setforeground(color.white);             setbackground(color.pink);             setfont(new font("arial", font.plain, 25));         }          @override         public dimension getpreferredsize() {             return new dimension(600, 400);         }          protected void paintcomponent(graphics g) {             super.paintcomponent(g);             graphics2d g2d = (graphics2d) g.create();             g2d.setcolor(getforeground());             g2d.drawstring("this gonna awesome", 200, 200);             g2d.dispose();         }      }      public static class screen {          public static void setfullscreen(displaymode dm, jframe window) {             graphicsenvironment env = graphicsenvironment.getlocalgraphicsenvironment();             graphicsdevice vc = env.getdefaultscreendevice();             window.setundecorated(true);             window.setresizable(false);             vc.setfullscreenwindow(window);              if (dm != null && vc.isdisplaychangesupported()) {                 try {                     vc.setdisplaymode(dm);                 } catch (exception ex) {                  }             }         }          public static void restorescreen() {             graphicsenvironment env = graphicsenvironment.getlocalgraphicsenvironment();             graphicsdevice vc = env.getdefaultscreendevice();             window w = vc.getfullscreenwindow();             if (w != null) {                 w.dispose();             }             vc.setfullscreenwindow(null);         }      } } 

you might have @ 2d graphics


Comments