graphics - Java - redraw background -
i want redraw background different image. here's sscce example - i'd add action listener repaint image.
package painting; import javax.swing.swingutilities; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.borderfactory; import java.awt.color; import java.awt.dimension; import java.awt.graphics; import java.awt.event.mouseevent; import java.awt.event.mouselistener; import java.awt.event.mouseadapter; import java.awt.event.mousemotionlistener; import java.awt.event.mousemotionadapter; public class swingpaintdemo3 { public static void main(string[] args) { swingutilities.invokelater(new runnable() { public void run() { createandshowgui(); } }); } private static void createandshowgui() { system.out.println("created gui on edt? "+ swingutilities.iseventdispatchthread()); jframe f = new jframe("swing paint demo"); f.setdefaultcloseoperation(jframe.exit_on_close); f.add(new mypanel()); f.pack(); f.setvisible(true); } } class mypanel extends jpanel { private int squarex = 50; private int squarey = 50; private int squarew = 20; private int squareh = 20; image img; public mypanel() { setborder(borderfactory.createlineborder(color.black)); addmouselistener(new mouseadapter() { public void mousepressed(mouseevent e) { movesquare(e.getx(),e.gety()); } }); addmousemotionlistener(new mouseadapter() { public void mousedragged(mouseevent e) { movesquare(e.getx(),e.gety()); } }); } private void movesquare(int x, int y) { int offset = 1; if ((squarex!=x) || (squarey!=y)) { repaint(squarex,squarey,squarew+offset,squareh+offset); squarex=x; squarey=y; repaint(squarex,squarey,squarew+offset,squareh+offset); } } public dimension getpreferredsize() { return new dimension(250,200); } protected void paintcomponent(graphics g) { super.paintcomponent(g); try { img = imageio.read(new file("graphics/close_0.jpg")); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } g.drawimage(img, 0, 0, null); g.drawstring("this custom panel!",10,20); g.setcolor(color.red); g.fillrect(squarex,squarey,squarew,squareh); g.setcolor(color.black); g.drawrect(squarex,squarey,squarew,squareh); } } so method should call redraw background different image?
as understand question (which 'very little') source might lead forward. note code should never attempt potentially blocking operation (like loading image) within paint or paintcomponent method.
import javax.swing.*; import java.awt.*; import java.awt.image.bufferedimage; import java.awt.event.*; import java.util.random; public class swingpaintdemo3 { public static void main(string[] args) { swingutilities.invokelater(new runnable() { public void run() { createandshowgui(); } }); } private static void createandshowgui() { system.out.println("created gui on edt? "+ swingutilities.iseventdispatchthread()); jframe f = new jframe("swing paint demo"); f.setdefaultcloseoperation(jframe.exit_on_close); f.add(new mypanel()); f.pack(); f.setvisible(true); } } class mypanel extends jpanel { private int squarex = 50; private int squarey = 50; private int squarew = 20; private int squareh = 20; image img; random r = new random(); public mypanel() { img = new bufferedimage(40,40,bufferedimage.type_int_rgb); setborder(borderfactory.createlineborder(color.black)); addmouselistener(new mouseadapter() { public void mousepressed(mouseevent e) { img = new bufferedimage( r.nextint(getwidth())+1, r.nextint(getheight())+1, bufferedimage.type_int_rgb); movesquare(e.getx(),e.gety()); } }); } private void movesquare(int x, int y) { int offset = 1; if ((squarex!=x) || (squarey!=y)) { squarex=x; squarey=y; repaint(); } } public dimension getpreferredsize() { return new dimension(250,200); } protected void paintcomponent(graphics g) { super.paintcomponent(g); g.drawimage(img, 0, 0, null); g.drawstring("this custom panel!",10,20); g.setcolor(color.red); g.fillrect(squarex,squarey,squarew,squareh); g.setcolor(color.black); g.drawrect(squarex,squarey,squarew,squareh); } }
Comments
Post a Comment