2010-11-03 3 views
2

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

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

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

Я думал, что 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

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

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

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

в верхней части paintComponent()?

+0

Ницца! Должен любить простые исправления. – Koop

Смежные вопросы