Если вы забудете позвонить super.paintComponent(g);
, фон не очистится, поэтому старое изображение все равно будет видно.И все добавленные вами JButton и другие материалы не будут нарисованы.Чтобы это исправить, сначала дайте панели нарисовать себя, затем вы можете нарисовать ваши вещи поверх нее.
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);// <-- let panel draw itself
Graphics2D g2d = (Graphics2D)g;
for (Shape i : myArr)
{
g2d.draw(i);
}
}
Это тоже работает (за исключением того, что она не рисует виджеты, добавленные вами с DrawingPanel.add(..)
).Это грязный хак:
@Override
protected void paintComponent(Graphics g)
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(Color.grey);
g2d.fillRect(0,0,this.getWidth(),this.getHeight()); //<-- clear the background
for (Shape i : myArr)
{
g2d.draw(i);
}
}
В слушателе этого будет достаточно.
if (buttonPress.buttonType.equals("Clear"))
{
myArr.clear();
repaint();
}
Вам не нужно звонить revalidate();
.