timer - How to properly access values from Queue using Iterator in Java? -
i used queue in adding values x , y coordinates of clicked mouse. however, got error when try access values using iterator. can me? how do right way? also, don't know timer , actionlistener code (are needed or have remove this?) little explanation useful me. hope me fix , improve these codes. thanks! :)
public class canvas extends jpanel implements mouselistener, actionlistener{ timer time; int numberofpoints; queue<integer> x = new linkedlist<integer>(); queue<integer> y = new linkedlist<integer>(); iterator itx = x.iterator(); iterator ity = y.iterator(); public canvas(){ addmouselistener(this); time = new timer(1, this); time.start(); numberofpoints = 5; } public void paint (graphics g){ super.paint(g); graphics2d g2d = (graphics2d) g; g2d.setbackground(color.black); g2d.drawstring("left: "+ numberofpoints, 10, 20); g2d.filloval(220, 170, 30, 30); g2d.setcolor(color.red); while(itx.hasnext()){ integer xx = (integer) itx.next(); integer yy = (integer) ity.next(); g2d.filloval(xx, yy, 30, 30); } } public void mousepressed(mouseevent e) { if(numberofpoints>0){ numberofpoints--; x.add(e.getx()-15); y.add(e.gety()-15); repaint(); } } public void mousereleased(mouseevent e) {} public void mouseclicked(mouseevent e) {} public void mouseentered(mouseevent e) {} public void mouseexited(mouseevent e) {} @override public void actionperformed(actionevent arg0) { repaint(); } }
anyway, here's main class in case want run it.
public class clikkpanikk extends jframe{ public clikkpanikk(){ short width = 500; short height = 400; add(new canvas()); settitle("clikkpanikk"); setvisible(true); setsize(width, height); setresizable(false); setlocationrelativeto(null); setdefaultcloseoperation(exit_on_close); } public static void main(string[] args) { new clikkpanikk(); } }
you creating iterator field rather before use. because of this, iterator notices values have changed since created , throws concurrent modification exception.
initialize iterator before while loop like:
itx = x.iterator(); ity = y.iterator(); while(itx.hasnext()){ integer xx = (integer) itx.next(); integer yy = (integer) ity.next(); g2d.filloval(xx, yy, 30, 30); } also, out of context may wrong (i haven't gone through of code), shouldn't need cast integer object can set integer object primitive int type:
integer varname = 12; will create integer object of value 12, unnecessary casting leaves room compiler miss fatal errors.
Comments
Post a Comment