Tuesday, 15 April 2014

swing - Calling paint() from another method in Java -



swing - Calling paint() from another method in Java -

what trying accomplish in java able paint random shapes method without having have shapes drawn start (user picks x, y, w, h themselves)

here have far:

public class design extends jcomponent { private static final long serialversionuid = 1l; public void paint(graphics g) { super.paintcomponent(g); } public void drawrect(int xpos, int ypos, int width, int height) { graphics g = null; g.drawrect(width, height, xpos, ypos); } }

as can see above, have drawrect function coded not understand how create when phone call drawrect() function, gets paint() function draw rectangle instead paint function does, within it, type g.drawrect() , x,y,w,h. reason why doing , not straight using paint() because i'm trying create component instead of having type out paint() function everytime, add together class swing , it's done.

hope understand i'm trying accomplish here. thanks.

you need paintings within paintcomponent() method calling super.paintcomponent().

i suggest store needed shapes in list , draw of them in paintcomponent(). instead of drawrect utilize addrect adding new shape list , phone call repaint() method. examine next simple example:

import java.awt.borderlayout; import java.awt.dimension; import java.awt.graphics; import java.awt.graphics2d; import java.awt.rectangle; import java.awt.shape; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.util.arraylist; import java.util.list; import java.util.random; import javax.swing.jbutton; import javax.swing.jcomponent; import javax.swing.jframe; public class testframe extends jframe { public testframe() { system.out.println("as".equalsignorecase(null)); setdefaultcloseoperation(jframe.exit_on_close); init(); pack(); setvisible(true); } private void init() { final design d = new design(); d.addrect(0,0,10,20); jbutton b = new jbutton("add"); b.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { random r = new random(); int w = r.nextint(100); int h = r.nextint(100); d.addrect(0,0,w,h); } }); add(d); add(b,borderlayout.south); } public static void main(string... strings) { new testframe(); } private class design extends jcomponent { private static final long serialversionuid = 1l; private list<shape> shapes = new arraylist<shape>(); public void paint(graphics g) { super.paintcomponent(g); graphics2d g2d = (graphics2d) g; for(shape s : shapes){ g2d.draw(s); } } public void addrect(int xpos, int ypos, int width, int height) { shapes.add(new rectangle(xpos,ypos,width,height)); repaint(); } @override public dimension getpreferredsize() { homecoming new dimension(100,100); } } }

java swing graphics components paint

No comments:

Post a Comment