NOTA! Questo sito utilizza i cookie e tecnologie simili.

Se non si modificano le impostazioni del browser, l'utente accetta. Per saperne di piu'

Approvo

Guida Java 2D - Capitolo 17: Il disegno di base in Java2D: caricare e mostrare le immagini.

 

Per inserire delle immagini in un pannello (o in altre componenti) è necessario:

  • 'caricare' un'immagine da file o da un URL, ossia istanziare un oggetto Image che conterrà i dati prelevati dal file;
  • visualizzare l'Image.

 

Per effettuare il primo passo utilizzeremo la classe Toolkit (lett.: 'cassetta degli attrezzi'), appartenente al package AWT, che mette a disposizione, tra gli altri, i seguenti metodi:

  • getImage(String filename)   :   Image
  • getImage(URL url)   :   Image

che permettono, come è facilmente intuibile, di creare degli oggetti Image a partire da file, memorizzati sul disco o ad un determinato URL.

 

 

 

Durante questa fase, comunque, è consigliabile avvalersi di un particolare oggetto, un MediaTracker, per 'attendere il caricamento' dell'immagine (l'operazione di caricamento richiede tempo ed il programma potrebbe continuare il flusso dell'esecuzione senza visualizzare l'immagine; con un MediaTracker, impediamo che questo avvenga).

 

Tutto quello che dovremo fare sarà istanziare un MediaTracker aggiungendo, alla lista di 'oggetti media' per i quali bisogna attendere il caricamento, la nostra Image (eventualmente anche più di una, in cascata).

 

Più in avanti, in questo stesso capitolo verrà mostrato un esempio di codice di caricamento e visualizzazione a video di un'immagine da file, comprendente le fasi di attesa implementante mediante MediaTracker appena descritte.

 

Ottenuto un oggetto Image, possiamo mostrarlo a video utilizzando il metodo di Graphics :

  • drawImage(Image img, int x, int y, ImageObserver observer);

all'interno di paintComponent.

 

Graphics mette a disposizione anche un altro metodo per disegnare le immagini, simile a quello appena mostrato ma che permette di ridimensionare l'immagine in fase di disegno per farle assumere larghezza width ed altezza height:

  • drawImage(Image img, int x, int y, int width, int height, ImageObserver observer); .

 

Ecco un esempio di istanziazione di un Image e di relativa visualizzazione dell'immagine (la classe qui definita è un pannello, dunque occorrerà definire un main e un Frame in una o più classi aggiuntive per realizzare un esempio completo e funzionante):

class PannelloConImmagine extends JPanel
{
private Image miaImmagine;

public PannelloConImmagine()
{
miaImmagine = Toolkit.getDefaultToolkit().getImage("immagine.gif");

// Attendo il caricamento dell'immagine (il MediaTracker introduce un 'ritardo', in attesa che gli oggetti ad esso associati vengano caricati)
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(miaImmagine, 0);
try
{
tracker.waitForID(0);
}
catch (InterruptedException e)
{
}
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);

//Disegno l'immagine, in questo caso con le dimensioni proprie della stessa, senza ridimensionarla.
g.drawImage(miaImmagine,20,20,this);
}
}

 

Come potete notare, è possibile - ed anzi è consigliabile - istanziare l'oggetto Image al di fuori di paintComponent, in modo da non dover accedere al file system ad ogni evento della GUI per dover ricreare l'Image, che - anche se ridisegnato - resta comunque sostanzialmente immutato.

 

 
Vai all'inizio della pagina