Domanda

Ho un JPanel che attira le immagini .png. ogni immagine ha 2 copie a significare se sia o non è stato selezionato. Un'immagine è normale e uno ha un bordo colorato per indicare la selezione è stata fatta. (Si può pensare a queste immagini come forme semplici per amor di discussione)

Quale versione di immagine viene disegnata è determinato tramite MouseListeners. Se l'utente seleziona image1, allora image1 visualizzerà sua versione evidenziato.

In generale questo è in funzione, però su di riverniciare () la versione evidenziata dell'immagine è lasciato alle spalle. Dal momento che la versione evidenziata è leggermente più grande rispetto alla versione normale, si può vedere che spuntava dietro l'immagine normale appena prelevato (sovrapposizione).

ho pensato repaint () avrebbe dovuto completamente smaltire dei disegni attuali e ripartire da zero, questo non sembra essere il caso qui. Qui di seguito è l'idea generale, blackClicked è attivata all'interno di una MouseListener.

Quindi la mia domanda è: come faccio a fare repaint () sbarazzarsi delle sue immagini tratte attualmente e ripartire da zero.

Inoltre, se c'è un modo più semplice per ottenere tutto questo per favore fatemelo sapere, rendendo 2 copie di immagini è un lavoro noioso.

@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);
}
È stato utile?

Soluzione

  

come faccio a fare repaint () sbarazzarsi delle sue immagini tratte attualmente e ripartire da zero.

Vuoi dire, come fare riempimento riverniciare la componente con il colore di sfondo di essa la prima della verniciatura? Ne dite di aggiungere

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

in cima paintComponent()?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top