Pregunta

Tengo un JPanel que dibuja imágenes .png. cada imagen tiene 2 copias para significar si es o no se ha seleccionado. Una imagen es normal y uno tiene un borde de color para indicar la selección se ha hecho. (Se puede pensar en estas imágenes como formas simples para el bien del argumento)

¿Qué versión de la imagen se dibuja se determina a través de MouseListeners. Si el usuario selecciona imagen1, imagen1 entonces mostrará su versión resaltado.

En general esto está funcionando, sin embargo al repinte () la versión de relieve de la imagen se quede atrás. Desde la versión de relieve es ligeramente más grande que la versión normal, se puede ver que se pega hacia fuera detrás de la imagen normal recién dibujado (superposición).

pensé repinte () se suponía que era completamente disponer de los dibujos actuales y empezar de cero, esto no parece ser el caso aquí. A continuación se muestra la idea general, blackClicked se activa dentro de un MouseListener.

Así que mi pregunta es ¿cómo puedo hacer repinte () deshacerse de sus imágenes dibujadas actualmente y empezar de cero.

Además, si hay una manera más sencilla de lograr todo esto por favor, que me haga saber, hacer 2 copias de las imágenes es un trabajo tedioso.

@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);
}
¿Fue útil?

Solución

  

¿cómo puedo hacer repinte () deshacerse de sus imágenes dibujadas actualmente y empezar de cero.

¿Quieres decir, cómo hacer relleno repinte el componente con su color de fondo antes de pintar? Cómo sobre la adición

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

en la parte superior de paintComponent()?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top