2017-05-18 7 views
0

J'écris un programme où les images sont affichées sur un JPanel, mais j'ai du mal à remplacer l'image existante quand j'en ouvre une nouvelle. Y at-il un moyen facile de supprimer l'ancienne image de l'ImageIcon et de remplacer par le nouveau? Je pensais que quelque chose comme mp.remove (pic); fonctionnerait ici, mais il dit que ce n'est pas pris en charge pour ImageIcon?Remplacer l'image courante dans JPanel par une autre

class MapPanel extends JPanel { 

public MapPanel(String filename) { 
    if(mp == null) { 
    pic = new ImageIcon(filename); 
    int w = pic.getIconWidth(); 
    int h = pic.getIconHeight(); 
    setPreferredSize(new Dimension(w, h)); 
    setMinimumSize(new Dimension(w, h)); 
    setMaximumSize(new Dimension(w, h)); 
    setLayout(null); 
} 
    else { int confirm = 
JOptionPane.showConfirmDialog(MapProgram.this, "Unsaved changes, " + 
"do you really want to open a new map?", 
      "New map", JOptionPane.OK_CANCEL_OPTION); 
      if (confirm != JOptionPane.OK_OPTION) 
       return;  

    // Remove the current image and display the new one choosen 
    // from the JFileChooser. 


    }  
} 
protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(pic.getImage(), 0, 0, this); 
    } 

} 
+3

Qu'en est-il juste de définir le nouveau imageIcon? – XtremeBaumer

+0

Comment utilisez-vous 'pic'? La seule chose que vous nous avez montrée est la création et l'affectation 'pic = new ImageIcon (filename);' ainsi que vous obtenez les dimensions de l'image. – Thomas

+0

Désolé, du code a été perdu d'une manière ou d'une autre. Voir le code mis à jour. – Andpej

Répondre

0

Pourquoi utilisez-vous ImageIcon? Il semble que vous voulez dessiner une image dans un JPanel, je ne sais pas pourquoi vous utilisez ImageIcon. Utilisez ImageIO.read() pour lire le fichier choisi par le sélecteur de fichier en tant que BufferedImage. Définissez l'image sur une variable membre, puis dans paintComponent() au lieu de pic.getImage(), utilisez votre variable membre. Après avoir choisi un fichier, vous définissez votre variable membre sur le nouvel appel de fichier repaint().

https://docs.oracle.com/javase/8/docs/api/javax/imageio/ImageIO.html#read-java.io.File-

En outre, la mise en preferredSize, taille min, et la taille maximale peut ou non faire quoi que ce soit. Tout dépend du gestionnaire de disposition utilisé par le JPanel.

-1

Vous ne savez pas si cela fonctionnera pour ce que vous voulez faire, mais essayez-le.

g.drawImage(new ImageIcon(filename).getImage(), 0, 0, this); 

ou juste de passer une image là-bas.