Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JPanel Graphics clearing and repainting?

I have a JPanel with a paintComponent() function. I'll call it once, then when the user clicks a different JButton, I'll set some flag and want to call this function again as it will do something slightly different after the flag is set.

So here's what I'm wondering: how do I clear the existing stuff from paintComponent? And to redraw, do I just call paintComponent again?

Currently I'm trying the following:

flag2 = true;
repaint(); //I expect (want) paintComponent to be called again

In paint component, I do stuff like:

if (flag2==true) {
    g.drawRect(...);
} else {
    g.drawLine(...);
}

But through testing it seems like there is something wrong with what I'm doing.

Thanks for any help.

like image 396
JDS Avatar asked Aug 01 '11 18:08

JDS


3 Answers

When you change a property of the panel then you need to invoke:

panel.repaint();

to cause the component to be repainted.

Then the first statement in the paintComponent() method should be:

super.paintComponent(g);

This will paint the background so you can now do your custom painting.

If you need more help then post your SSCCE that demonstrates the problem.

like image 118
camickr Avatar answered Nov 17 '22 01:11

camickr


To clear all previously drawn graphics, invoke g.clearRect(0, 0, getWidth(), getHeight()).

like image 14
mre Avatar answered Nov 17 '22 00:11

mre


First, why not use an enum instead of a boolean?

enum Enum { 
    RECTANGLE,
    LINE,
    CIRCLE
}

Enum choice = RECTANGLE; //default to RECTANGLE

switch(choice) { 
   // case RECTANGLE, LINE, CIRCLE
}

With regards to your issue, can you answer my comments in your question?

like image 2
Amir Afghani Avatar answered Nov 17 '22 00:11

Amir Afghani