swing - shape refresh on a full transparent window in Java -


this first question since find other questions far. here comes question: designed window on have 2 portions. left portion transparent , want draw refrashable shape on it. (in following, shapw square.) right portion opaque , won't draw shape on it. ok left portion, background shape not refrashable.

        package haxbot;      import java.awt.*;     import java.awt.robot.*;     import javax.swing.*;     import java.awt.image.*;      // import com.sun.awt.awtutilities;     public class drawscreen extends javax.swing.jframe {          public drawscreen() {             initcomponents();         }     //-------------------- automatically created ---------------------------------         // <editor-fold defaultstate="collapsed" desc="generated code">                                   private void initcomponents() {              jlabel1 = new javax.swing.jlabel();             jlabel2 = new javax.swing.jlabel();             jlabel5 = new javax.swing.jlabel();             jlabel6 = new javax.swing.jlabel();             jbutton1 = new javax.swing.jbutton();              setdefaultcloseoperation(javax.swing.windowconstants.exit_on_close);             setalwaysontop(true);             setcursor(new java.awt.cursor(java.awt.cursor.default_cursor));             setresizable(false);             setundecorated(true);             addmousemotionlistener(new java.awt.event.mousemotionadapter() {                 public void mousemoved(java.awt.event.mouseevent evt) {                     formmousemoved(evt);                 }             });              jlabel1.settext("position:");              jlabel2.setforeground(new java.awt.color(255, 0, 0));             jlabel2.settext("[ 123, 134]");              jlabel5.settext("color:");              jlabel6.setforeground(new java.awt.color(255, 0, 0));             jlabel6.settext("[ 255, 255, 255]");              jbutton1.setbackground(new java.awt.color(255, 0, 0));             jbutton1.setfont(new java.awt.font("tahoma", 1, 11)); // noi18n             jbutton1.setforeground(new java.awt.color(255, 0, 0));             jbutton1.settext("x");             jbutton1.addactionlistener(new java.awt.event.actionlistener() {                 public void actionperformed(java.awt.event.actionevent evt) {                     jbutton1actionperformed(evt);                 }             });              javax.swing.grouplayout layout = new javax.swing.grouplayout(getcontentpane());             getcontentpane().setlayout(layout);             layout.sethorizontalgroup(                 layout.createparallelgroup(javax.swing.grouplayout.alignment.leading)                 .addgroup(javax.swing.grouplayout.alignment.trailing, layout.createsequentialgroup()                     .addcontainergap(853, short.max_value)                     .addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.leading)                         .addgroup(javax.swing.grouplayout.alignment.trailing, layout.createparallelgroup(javax.swing.grouplayout.alignment.leading, false)                             .addgroup(layout.createsequentialgroup()                                 .addcomponent(jlabel1)                                 .addpreferredgap(javax.swing.layoutstyle.componentplacement.related, javax.swing.grouplayout.default_size, short.max_value)                                 .addcomponent(jlabel2, javax.swing.grouplayout.preferred_size, 88, javax.swing.grouplayout.preferred_size))                             .addgroup(javax.swing.grouplayout.alignment.trailing, layout.createsequentialgroup()                                 .addcomponent(jlabel5, javax.swing.grouplayout.preferred_size, 40, javax.swing.grouplayout.preferred_size)                                 .addgap(26, 26, 26)                                 .addcomponent(jlabel6, javax.swing.grouplayout.preferred_size, 88, javax.swing.grouplayout.preferred_size)))                         .addcomponent(jbutton1, javax.swing.grouplayout.alignment.trailing)))             );             layout.setverticalgroup(                 layout.createparallelgroup(javax.swing.grouplayout.alignment.leading)                 .addgroup(layout.createsequentialgroup()                     .addcomponent(jbutton1, javax.swing.grouplayout.preferred_size, 15, javax.swing.grouplayout.preferred_size)                     .addgap(58, 58, 58)                     .addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.baseline)                         .addcomponent(jlabel2)                         .addcomponent(jlabel1))                     .addgap(18, 18, 18)                     .addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.baseline)                         .addcomponent(jlabel6)                         .addcomponent(jlabel5))                     .addcontainergap(338, short.max_value))             );              pack();         }// </editor-fold>  //-------------------- automatically created (end) ---------------------------------                                 private void formmousemoved(java.awt.event.mouseevent evt) {                                             mousepos = evt.getpoint();             int mx = (int) mousepos.getx();             int = (int) mousepos.gety();             mousepos = evt.getpoint();             jlabel2.settext("[ " + mx + ", " + + " ]");             getcolor(mx + (int) wind.getlocation().getx(), + (int) wind.getlocation().gety());             paint(this.getgraphics());         }                                         private void jbutton1actionperformed(java.awt.event.actionevent evt) {                                                      system.exit(0);         }                                                  public color getcolor(int mx, int my) {             try {                 robot = new robot();             } catch (awtexception awte) {                 awte.printstacktrace();             }              rectangle capturesize = new rectangle(mx - 15, - 15, 30, 30);             img = robot.createscreencapture(capturesize);              currcolor = robot.getpixelcolor(mx, my);               (int = 0; < img.getwidth(); i++) {                 (int j = 0; j < img.getheight(); j++) {                     int x = img.getrgb(i, j);                  }             }              jlabel6.settext("[ " + currcolor.getred() + ", " + currcolor.getgreen() + ", "                     + currcolor.getblue() + "]");             return currcolor;         }          public static void main(string args[]) {             graphicsobtained = false;             java.awt.eventqueue.invokelater(new runnable() {                  public void run() {                     wind = new drawscreen();                     wind.setvisible(true);                     wind.setlocation(182, 154);                     wind.setdefaultcloseoperation(exit_on_close);                     try {                         //uimanager.setlookandfeel("javax.swing.plaf.metal.metallookandfeel");                         uimanager.setlookandfeel("com.sun.java.swing.plaf.windows.windowslookandfeel");                         swingutilities.updatecomponenttreeui(wind);                     } catch (exception ex) {                         ex.printstacktrace();                     }                     // add transparency                     //  awtutilities.setwindowopacity(wind, (float) 0.6);                     currcolors = new color[10][10];                  }             });         }          public void paint(graphics g) {             leftscreen = (graphics2d) g.create();             leftscreen.setclip(0, 0, 840, 410);              if (mousepos != null) {                 //leftscreen.clearrect((int) mousepos.getx() - 150, (int) mousepos.gety() - 150, 300, 300);                 leftscreen.drawrect((int) mousepos.getx() - 15, (int) mousepos.gety() - 15, 30, 30);             }              rightscreen = (graphics2d) g.create();             rightscreen.setclip(850, 0, this.getwidth(), 410);             super.paint(rightscreen);             rightscreen.dispose();             leftscreen.dispose();             if (mousepos != null) {                 //g2d1.clearrect(0, 0, 520, 430);             }               /*g2d.setcolor(color.red);             g2d.clearrect(55, 430, 90, 10);             if (mousepos != null)             g2d.drawstring("[ " + mousepos.getx() + ", " + mousepos.gety() + " ]", 55, 440);             else             g2d.drawstring("[ 0, 0 ]", 55, 440);*/          }         // variables declaration - not modify                              private javax.swing.jbutton jbutton1;         private javax.swing.jlabel jlabel1;         private javax.swing.jlabel jlabel2;         private javax.swing.jlabel jlabel5;         private javax.swing.jlabel jlabel6;         // end of variables declaration                            private point mousepos;         private point playerpos;         private color currcolor;         private static color[][] currcolors;         private static drawscreen wind;         private bufferedimage img;         private static boolean graphicsobtained;         private graphics initialsection;         private graphics2d leftscreen, rightscreen;         robot robot = null;     } 

---------------------- edit (second code) -------------------------------------------

import java.awt.event.mouseevent; import javax.swing.*; import java.awt.*;  // 3) in class (which extends jframe) public class jframetrial extends jframe {      public static void main(string[] args) {         mousepos = new point(0, 0);          jframetrial jft = new jframetrial();         jft.setdefaultcloseoperation(exit_on_close);         jft.setsize(300, 300);         jft.setvisible(true);      }      public jframetrial() {         /* 4) set contentpane using setcontentpane         class created extending jcomponent.*/         jct = new jcomponenttrial(150, 150);         setcontentpane(jct);          addmousemotionlistener(new java.awt.event.mousemotionadapter() {             public void mousemoved(mouseevent e) {                 mousepos = e.getpoint();                 getcontentpane().repaint();             }         });     }     private jcomponenttrial jct;     private static point mousepos;      // 1) have create class extends jcomponent.     private class jcomponenttrial extends jcomponent {          public jcomponenttrial(int x, int y) {             setsize(x, y);         }          // 2)there override paintcomponent() method whatever want draw.         @override         public void paintcomponent(graphics g) {             graphics gg = g.create();             gg.setcolor(color.red);             gg.drawrect((int) mousepos.getx() - 15,                     (int) mousepos.gety() - 15, 30, 30);             gg.dispose();         }     } } 

a few suggestions:

  • draw in class extends jpanel or jcomponent, not jframe.
  • draw in overridden paintcomponent method, not paint method.
  • the first line of paintcomponent method should call super.paintcomponent(g);
  • don't dispose of graphics object passed in paintcomponent (or paint) parameter. dispose graphics or graphics2d objects have created.

Comments

Popular posts from this blog

c# - SharpSVN - How to get the previous revision? -

c++ - Is it possible to compile a VST on linux? -

url - Querystring manipulation of email Address in PHP -