Saturday, 15 September 2012

swing - Java JPanel repaint() issue? -



swing - Java JPanel repaint() issue? -

i'm kind of new guis. created simple app paints oval different color every time button pushed. when ever phone call jpanel's repaint() doesn't repaint panel's portion of frame (the oval). instead, kind of repaints entire frame , paints button clicked @ top of frame (the northern border). know can phone call jframe's repaint() solve problem, wondering why happening. thought repaint() phone call paintcomponent() of object. can explain why behaving way?? thanks!!

import java.awt.borderlayout; import java.awt.color; import java.awt.graphics; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.boxlayout; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jpanel; public class jbutton extends jframe implements actionlistener { jframe frame; jbutton b; panel p; public void go() { frame = new jframe(); b = new jbutton("click me"); p = new panel(); b.addactionlistener(this); frame.add(borderlayout.center, p); frame.add(borderlayout.south, b); frame.setdefaultcloseoperation(frame.exit_on_close); frame.setsize(250, 250); frame.setvisible(true); } class panel extends jpanel { public void paintcomponent(graphics g) { int reddish = (int) (math.random() * 255); int greenish = (int) (math.random() * 255); int bluish = (int) (math.random() * 255); g.setcolor(new color(red, blue, green)); g.filloval(20, 30, 50, 50); } } @override public void actionperformed(actionevent arg0) { p.repaint(); } }

make sure calling super.paintcomponent prepare graphics context painting

@override protected void paintcomponent(graphics g) { super.paintcomponent(g) int reddish = (int) (math.random() * 255); int greenish = (int) (math.random() * 255); int bluish = (int) (math.random() * 255); g.setcolor(new color(red, blue, green)); g.filloval(20, 30, 50, 50); }

the long , short of graphics context shared resource. every component painted during paint cycle share same graphics context, mean ever painted still there. need clear/prepare graphics context each time paintcomponent called.

this paintcomponent does...

java swing user-interface jpanel components

No comments:

Post a Comment