Caricamento di immagini multiple


DOMANDA:

Come posso caricare immagini multiple in un'interfaccia grafica Java?


RISPOSTA:

Prendendo spunto dalla domanda fatta nel post Caricamento di immagini, vi mostrerò ora come caricare immagini multiple. Le differenze sono sostanzialmente nella creazione di un oggetto Immagine dedicato ed alla gestione di un numero dinamico di immagini. 


Vediamo la nuova classe Immagine.java:

package immagini;

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

public class Immagine {
private static long count = 0;
private long id;
private BufferedImage image;
private int x;
private int y;

    // "imagePath" è il path dell'immagine da caricare
    // x e y sono le coordinate dell'immagine
public Immagine(String imagePath, int x, int y) {
this.image = loadImage(imagePath);
this.x = x;
this.y = y;
this.id = count++;
}

// il parametro "path" è il path dell'immagine da caricare
private BufferedImage loadImage(String path) {
BufferedImage bimg = null;
BufferedImage ret = null;
try {
bimg = ImageIO.read(new File(path));
} catch (Exception e) {
e.printStackTrace();
}
ret = new BufferedImage(bimg.getWidth(), bimg.getHeight(),
BufferedImage.TYPE_INT_ARGB);
Graphics2D g = ret.createGraphics();
g.drawImage(bimg, 0, 0, null);
g.dispose();

return ret;
}

public static long getCount() {
return count;
}

public long getId() {
return id;
}

public void setId(long id) {
this.id = id;
}

public BufferedImage getImage() {
return image;
}

public void setImage(BufferedImage image) {
this.image = image;
}

public int getX() {
return x;
}

public void setX(int x) {
this.x = x;
}

public int getY() {
return y;
}

public void setY(int y) {
this.y = y;
}
}


Vediamo ora come si è snellito Pannello.java che ha acquisito un comportamento più coeso:

package immagini;

import java.awt.Graphics;

import javax.swing.JPanel;

public class Pannello extends JPanel {
    private static final long serialVersionUID = 1L;
 
    private Immagine[] immagini;

    public Pannello(Immagine[] immagini) {
        this.immagini = immagini;
    }

    public void paintComponent(Graphics g) {
        for(Immagine i : immagini)
        g.drawImage(i.getImage(), i.getX(), i.getY(), this);
        repaint();
    }
}


La classe Finestra.java è rimasta simile, cambia la presenza di un array di Immagine:

package immagini;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Finestra extends JFrame {
    private static final long serialVersionUID = 1L;

    public Finestra( ) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createGUI(600, 600);
            }
        });
    }

    private void createGUI(int frameDimX, int frameDimY) {
        this.setSize(frameDimX + 16,frameDimY + 34); // 16,34 = bordi della finestra
        Immagine[] immagini = new Immagine[3];
        immagini[0] = new Immagine("C:/1.jpg", 20, 20);
        immagini[1] = new Immagine("C:/2.png", 70, 70);
        immagini[2] = new Immagine("C:/3.png", 0, 120);
     
        this.getContentPane().add(new Pannello(immagini));
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}


Ed infine la classe di Test.java che è rimasta identica:

package immagini;

public class Test {

    public static void main(String[] args) {
        new Finestra();
    }
}

Commenti

  1. come faccio a far camminare il mio sfondo

    RispondiElimina
  2. come faccio a far camminare il mio sfondo.grazie mille

    RispondiElimina
  3. Il tuo esempio funziona alla perfezione.
    Pur lavorando con 3 panel è anche molto semplice e quindi l'ideale per chi sta iniziando.
    Stavo cercando di introdurre la modifica successiva delle 3 immagini ma finora sono solo riuscito a creare altri 3 panel con altre 3 immagini.
    Io invece vorrei solo creare un metodo per modificare le immagini già presenti con altre 3.
    Giuseppe, puoi darmi qualche consiglio o esempio?
    Grazie

    RispondiElimina

Posta un commento

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java