swing - Create Polygon with Mouse Listener Java -


import java.awt.event.*; import java.awt.*; import javax.swing.*; import java.util.*; import javax.swing.event.*; import javax.swing.jpanel;  public class triangle extends jframe  {     public triangle()     {     add(new polygonspanel());     }      public static void main(string [] args)     {         triangle t = new triangle();         t.setsize(500,500);         t.settitle("triangle");         t.setvisible(true);         t.setdefaultcloseoperation(jframe.exit_on_close);         t.setlocationrelativeto(null);     } }  class polygonspanel extends jpanel implements mouselistener     {     private int x1,x2,x3,y1,y2,y3;     @override     protected void paintcomponent(graphics g)         {         super.paintcomponent(g);          polygon p = new polygon();          p.addpoint(x1,y1);         p.addpoint(x2,y2);         p.addpoint(x3,y3);         this.addmouselistener(this);          g.drawpolygon(p);         }          public void mouseexited(mouseevent e)         {          }         public void mouseentered(mouseevent e)         {          }         public void mouseclicked(mouseevent e)         {             int = 0;             if(i==0)              {              int x1= e.getx();              int y1= e.gety();              i++;              }              else if(i==1)              {              int x2= e.getx();              int y2= e.gety();              i++;              }              else if(i==2)              {              int x3= e.getx();              int y3= e.gety();              i++;              }          }         public void mousepressed(mouseevent e)         {          }         public void mousereleased(mouseevent e)         {          }       } 

i want make triangle using polygon , set coordinate click mouse. compiler did't show error, can ? ..........................................................................................................................................................................................................

in order debug such applications, can add println() lines in right places. while sounds bit childish, method of debugging, called printf-debugging used professional developers in cases.

i suggest add system.err.println("1") resp. system.err.println("2") / system.err.println("3") in each of if-branches of mouseclicked() find out why it's not recording points. hint: want variable i have different scope now`.

registering mouselistener should not done in paintcomponent(). if think little bit this, should obvious. ask yourself: how need register mouselistener? once. how paintcomponent() called? many times. so, addmouselistener() in wrong place.

once fixed these, might notice have hide/unhide, resize or (on os) move window in order polygons redrawn. that's because once you've changed appearance recording new coordinate polygon, don't tell java component needs redrawn.

the programming model usage extension apply still shown on many web pages , in many books of today, it's plainly wrong because violates lsp - liskov substitution principle. in case, extending jpanel polygonspanel right, because kind of painting canvas in fact new component, so, creating new class component perfect that. jpanel might not best superclass it, check out class hierarchy of swing class bit , discover better superclass. however, in triangle, not want extend jframe, merely use jframe without adding new reusable features it, subclassing not right in case.


Comments

Popular posts from this blog

ruby on rails - RuntimeError: Circular dependency detected while autoloading constant - ActiveAdmin.register Role -

c++ - OpenMP unpredictable overhead -

javascript - Wordpress slider, not displayed 100% width -