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.
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.
To clear all previously drawn graphics, invoke g.clearRect(0, 0, getWidth(), getHeight())
.
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?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With