paintComponent () оставляя позади ранее нарисованные изображения после repaint () - PullRequest
2 голосов
/ 03 ноября 2010

У меня есть JPanel, который рисует .png изображения.Каждое изображение имеет 2 копии, чтобы указать, было ли оно выбрано.Одно изображение является нормальным, а у другого есть цветная рамка для обозначения того, что выбор сделан.(Вы можете думать об этих изображениях как о простых формах ради аргумента)

Какая версия изображения нарисована, определяется с помощью MouseListeners.Если пользователь выберет image1, то image1 отобразит его выделенную версию.

В целом это работает, однако после repaint () выделенная версия изображения остается позади.Так как выделенная версия немного больше, чем обычная, вы можете видеть, что она торчит за вновь нарисованным нормальным изображением (перекрытие).

Я думал, что repaint () должен был полностью избавиться от текущих чертежей и начатьс нуля, похоже, это не так.Ниже приводится общая идея, что blackClicked переключается внутри MouseListener.

Поэтому мой вопрос заключается в том, как заставить repaint () избавиться от нарисованных в данный момент изображений и начать с нуля.

Кроме того, если есть более простой способ добиться всего этого, пожалуйста, дайте мне знать, создание 2 копий изображений - утомительная работа.

@Override
public void paintComponent(Graphics g){

    Graphics2D g2 = (Graphics2D) g;

    if(blackClicked)
        g2.drawImage(blackSelected,0, 0, null);
    else
        g2.drawImage(black,0, 0, null);

    g2.drawImage(green,0, 0, null);
}

1 Ответ

1 голос
/ 03 ноября 2010

как заставить repaint () избавиться от нарисованных в данный момент изображений и начать с нуля.

Вы имеете в виду, как заставить перекрасить заполнить компонентс фоновым цветом перед покраской?Как насчет добавления

g2.setColor(getBackground());
g2.fillRect(0, 0, getWidth(), getHeight());

поверх paintComponent()?

...