java - Paint Panel Incorrect Rendering -


here going on:

i wanted make basic paint program practice using paint method, working graphics, using toolbars, et cetera. i've been doing lot of reading on how these things, , i'm sure i'm missing important line of code somewhere because paintpanel rendering jmenu isn't supposed there. have jmenu set actionlisteners, 1 rendered doesn't , cannot interacted with. here's picture: enter image description here

as can see in following image, can paint on menu , still not react @ all. plus, time can see radom button previous window in program added reason. enter image description here

here's button came from: enter image description here

i @ loss how fix this, here code relevant classes:

this panel painting. package painter;

import java.awt.color; import java.awt.graphics; import java.awt.event.mouseevent;  import javax.swing.jpanel; import javax.swing.event.mouseinputlistener;  @suppresswarnings("serial") public class paintpanel extends jpanel implements mouseinputlistener {     //these 2 values used determine mouse , paint...stuff...     public int xcoordinate, ycoordinate = -10;      static color currentcolor = color.black;      public paintpanel()     {         //these 2 methods attaches mouse listener methods listed below actual panel.         addmouselistener(this);         addmousemotionlistener(this);     }     //this method overwritten version of default paint method.  it's job render custom graphics     //objects on screen.  graphics g argument item responsible doing actual rendering.     @override     public void paintcomponent(graphics g)     {         // super.paintcomponent(g);          g.setcolor(currentcolor);          g.fillrect(xcoordinate, ycoordinate, 10, 10);     }      @override     //this method, added because of mouseinputlistener implementation, used when user clicks left mouse button.     public void mouseclicked(mouseevent e)      {         xcoordinate = e.getx();         ycoordinate = e.gety();         repaint();     }     @override     public void mouseentered(mouseevent arg0)      {         // todo auto-generated method stub      }     @override     public void mouseexited(mouseevent arg0)     {         // todo auto-generated method stub      }      @override     public void mousepressed(mouseevent arg0)      {         // todo auto-generated method stub      }      @override     public void mousereleased(mouseevent arg0)      {         // todo auto-generated method stub      }      @override     //this method, added because of mouseinputlistener implementation, used when user presses , holds     //left mouse button while moving mouse.     public void mousedragged(mouseevent e)      {            xcoordinate = e.getx();         ycoordinate = e.gety();         repaint();     }      @override     public void mousemoved(mouseevent arg0)      {         // todo auto-generated method stub      }     public static void changecolor(color color)     {         currentcolor = color;     } } 

this main class adds in paintpanel, menu, , later other buttons , such.

package painter;  import java.awt.borderlayout;  import javax.swing.jframe; import javax.swing.jmenubar; import javax.swing.jpanel;  import painter.menu.filemenu; import painter.menu.toolsmenu;  @suppresswarnings("serial") //this class job of bringing various sub-classes , rendering everything. public class mainpaintergui extends jframe {     private jpanel menupanel;      private jmenubar menubar;      //these values going used set initial window size.     private final short window_height = 1000;     private final short window_width = 1000;      //this constructor actual creation of window.     public mainpaintergui()     {         //this same thing settitle does.         super("painter");         //settitle("painter");          //this method set window supposed when red x clicked.         //technically, value passed integer.         setdefaultcloseoperation(exit_on_close);          //obviously method sets initial size of window.  can changed user however.         setsize(window_width,window_height);          //this method sets center of window relative whatever passed.  in case, null makes         //the window appear in center of desktop regardless of size.         setlocationrelativeto(null);          menupanel = new jpanel();          menubar = new jmenubar();          menubar.add(new filemenu());         menubar.add(new toolsmenu());          menupanel.add(menubar);          //the add method attaches component whatever calling, frame or panel.         //the borderlayout needed use draggable toolbar.         add(new paintpanel(), borderlayout.center);         add(menupanel, borderlayout.north);          //this allow window seen.  make sure method last, if          //a component created afterwards may not visible.         setvisible(true);     } } 

those 2 classes should ones relevant current problem, let me know if other classes needed. didn't want clutter post useless information.

now, here have tried already:

as can see in paintpanel class, had added super.paintcomponent(g); method call. however, while fixes problem, paints single black square @ time. imagine because it's overwriting panel paint call, painting square each time repaint called.

here's photo super.paintcomponent(g) added: enter image description here

i'm not sure if matters, using windows 10.

thanks can provided.

i think need call .repaint() make ui less glitchy.


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -