java - Slow reaction(repainting) of mouseListener -


i made frame repaints when click on it(also new geometric figure painted) when click rapidly not responds fast, needs half sec beetween clicks. have done wrong?

import java.awt.frame; import java.awt.graphics; import java.awt.event.mouseevent; import java.awt.event.mouselistener; import java.awt.event.windowevent; import java.awt.event.windowlistener; import java.util.arraylist;  import javax.swing.joptionpane;   public class okienko extends frame implements mouselistener{ public static final int size = 500; public static int mx = 0,my = 0; public arraylist<wyrysowywalny> l; //collection of object draw     okienko(){         l = new arraylist<wyrysowywalny>();         creategui();     }     public void creategui(){         setsize(size, size);         setvisible(true);         setalwaysontop(true);         settitle("zadanie 1");         addwindowlistener(new windowlistener() {                 public void windowopened(windowevent arg0) {}                        public void windowiconified(windowevent arg0) {}                     public void windowdeiconified(windowevent arg0) {}                           public void windowdeactivated(windowevent arg0) {}             public void windowclosed(windowevent arg0) {}             @override             public void windowclosing(windowevent arg0) {                 joptionpane.showconfirmdialog(null, "dziekujemy za skorzystanie z programu","",joptionpane.plain_message);                 system.exit(0);                  }             @override             public void windowactivated(windowevent arg0) {                 repaint();              }         });         addmouselistener(this);     }       @override     public void mouseclicked(mouseevent e) {///  important!         system.out.println(e.getx() + " " + e.gety());         mx = e.getx();         = e.gety();         int r;          r = (int) (math.random() *  6);         switch(r){             case 0: l.add(new trojkat(mx,my,lxy(),lxy(),lxy(),lxy()));break; // objects draw                  case 1: l.add(new prostokat(mx,my,lr(),lr()));break;             case 2: l.add(new kwadrat(mx,my,lr()));break;             case 3: l.add(new kolo(mx,my,lr()));break;             case 4: l.add(new elipsa(mx,my,lr(),lr())); break;             case 5: l.add(new trojkatrownoboczny(mx,my,lr())); break;         }                repaint();      }     @override     public void mouseentered(mouseevent arg0) {}     @override     public void mouseexited(mouseevent arg0) {}     @override     public void mousepressed(mouseevent arg0) {}     @override     public void mousereleased(mouseevent arg0) {}      public static int lxy(){         return (int) (math.random()*size * 4d/5 + 1d/40*size);     }     public static int lr(){         return (int) (math.random()*200 - 1d/40*size);     }     public void paint(graphics g){         super.paint(g);         for(wyrysowywalny w : l)             w.draw(g);//draw object     }       public static void main(string[] args) {          new okienko();     }   } 

absent complete example, can make several observations:

  • instead of mouseclicked(), fires when mouse released in same component, may want respond mousepressed().

  • also consider mouseadapter on implements mouselistener.

  • as mentioned here, "swing programs should override paintcomponent() instead of overriding paint()."

  • swing gui objects should constructed , manipulated only on event dispatch thread.

  • a more elaborate example no perceptible latency cited here.


Comments

Popular posts from this blog

ios - iPhone/iPad different view orientations in different views , and apple approval process -

java Extracting Zip file -

C# WinForm - loading screen -