Salve a tutti! Ho appena consegnato per l'università un bel progetto di un gioco. Si tratta di un gioco di ruole fantasy, con anche interfaccia grafica. Sono riuscito a caricare e visualizzare delle immagini riutilizzando del codice che ho trovato sul manuale e effettuando alcune modifiche. Il tutto funziona ma non ho idead del perchè! Infatti se riscrivo lo stesso codice in un altro punto del programma nn mi viene visualizzato niente.
Ciò che ho fatto è visualizzare una certa immagine in una JLabel (uso Swing).
Per farlo ho creato una nuova Classe MyLabel che estende JLabel:
poi, nel main, faccio normalmente:codice:import java.awt.*; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.*; public class MyLabel extends JLabel { Toolkit t; Image pianura, citta, collina; int tipo; Graphics g; public MyLabel() { init(); } public MyLabel(int tipo) { this.tipo = tipo; } private void init() { t = Toolkit.getDefaultToolkit(); // caricamento immagini try { collina = ImageIO.read(new File("img/collina.jpg")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { citta = ImageIO.read(new File("img/citta.jpg")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { pianura = ImageIO.read(new File("img/pianura.jpg")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void setTipo(int tipo) { this.tipo = tipo; } public void paintComponent(Graphics g) { super.paintComponents(g); setBackground(Color.black); if (tipo == 0) g.drawImage(collina, 0, 0, null); else if (tipo == 1) g.drawImage(citta, 0, 0, null); else if (tipo == 2) g.drawImage(pianura, 0, 0, null); } }
E aggiungo il pannello alla finestra. Io ho fatto 2 pannelli, che sono a loro volta contenuti in un altro pannello con BorderLayout. In quello centrale ho messo un array di MyLabel (una specie di mappa) che, a seconda di come viene caricata la mappa, carica casualmente le immagini (uso un numero random da inserire nel setTipo. Tutto funziona alla perfezione, non solo... cambia anke dinamicamente nel caso voglio aggiornare la mappa, semplicemente richiamando setTipo. Se invece aggiungo altri pannelli con altre MyLabel nel BorderLayout WEST o EAST ecc... nn si vede nulla!!!codice:JPanel pannello = new JPanel(); MyLabel l = new MyLabel(); pannello.add(l); l.setTipo(0);
Sbaglio qualcosa? Quando e perchè Java dovrbbe non visualizzarmi le immagini?

Rispondi quotando