PaintComponent () Оставление за ранее нарисованными изображениями после перекраски ()

StackOverflow https://stackoverflow.com/questions/4084928

Вопрос

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

Какая версия изображения нарисована, определяется через Mouselisteners. Если пользователь выбирает Image1, то Image1 будет отображать его выделенную версию.

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

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

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

Кроме того, если есть более простая способ добиться всего этого, пожалуйста, дайте мне знать, что изготовление 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);
}
Это было полезно?

Решение

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

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

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

на вершине paintComponent()?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top