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
Post a Comment