the location(x,y) of java swing 'JLabel' and Graphics elements are not same -


i have draw jlabel onclick event on drawn circle. newly created jlabel should placed placed closed line created. trying draw jlabel @ middle position of line. problem is, after setting fixed calculated coordinates(x,y), jlabel not drawn in given location.(unlike g.drawline() or g.drawoval()). code given below: need fix it.

    public class buttonexample extends jframe{     jframe frame;     jlabel label1, label2, label3;     private shape myshape;     private int arrowadded = 0;     public buttonexample() {         super("location test of jlabel , graphics objects");          label1 = new jlabel("0,0");         //label2 = new jlabel("40,40");          label1.setbounds(0, 0, 50, 50);         label1.setborder(borderfactory.createlineborder(color.black));         //label2.setbounds(100, 100, 50, 50);         //label2.setborder(borderfactory.createlineborder(color.black));          add(label1);         //add(label2);          repaint();           addmouselistener(new mouseadapter() {              @override              public void mouseclicked(mouseevent me) {                 super.mouseclicked(me);                 if (myshape.contains(me.getpoint())) {                     arrowadded = 1;                     repaint();                 }              }          });          setlayout(null);         setsize(1000,600);         setlocationrelativeto(null);         setdefaultcloseoperation(jframe.exit_on_close);         setvisible(true);      }      @override     public dimension getpreferredsize() {         return new dimension(1000, 600);     }      public void paint(graphics g){           super.paint(g);          int startx = 100;         int starty = 100;         int endx = 180;         int endy = 120;          g.setcolor(new color(0, 255, 0));         myshape = new ellipse2d.double(startx, starty, 30, 30);         graphics2d g2d = (graphics2d) g;         g2d.draw(myshape);         g.drawline(startx, starty, endx, endy);          int lx = (int)math.abs(endx-startx)/2;         int ly = (int)math.abs(endy-starty)/2;          if(endx>startx) {             lx = lx+startx;         }else {             lx = lx+endx;         }          if(endy>starty) {             ly = ly+starty;         }else {             ly = ly+endy;         }          if(arrowadded == 1) {             label3 = new jlabel();             label3.setbounds(lx, ly, 20, 15);             label3.setborder(borderfactory.createlineborder(color.black));             add(label3);             g.drawrect(lx, ly, 20, 15);         }enter code here     }        public static void main(string[] args) {         new buttonexample();     }  }    

don't override paint() on jframe!

the frame includes title bar , borders, can't paint @ (0, 0). need painting offset frame decorations.

instead, custom painting should done overriding paintcomponent(...) method of jpanel , add panel frame. offsets relative panel, can use (0, 0). of course add label panel @ desired location.

read section swing tutorial on custom painting more information , working examples.


Comments

Popular posts from this blog

javascript - Create a stacked percentage column -

Optimising Firebase database by automatically overwriting data -

javascript - Angular UI-Grid customTemplate directive causing rows to load slowly/? -