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:
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.
here's button came from:
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:
i'm not sure if matters, using windows 10.
thanks can provided.
i think need call .repaint()
make ui less glitchy.
Comments
Post a Comment