/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package feuille.karaoke.lib; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JFileChooser; // Code from ImagePreview.java (FileChooserDemo2.java - Sun Microsystems) /** <p>This class is a component to view thumbnails.<br /> * Cette classe est un composant pour lire des petites images.</p> */ public class ImagePreview extends JComponent implements PropertyChangeListener { ImageIcon thumbnail = null; File file = null; /** <p>Create a new ImagePreview.<br />Crée un nouveau ImagePreview.</p> * @param fc The parent JFileChooser. */ @SuppressWarnings("LeakingThisInConstructor") public ImagePreview(JFileChooser fc) { setPreferredSize(new Dimension(100, 50)); fc.addPropertyChangeListener(this); } /** <p>Load an image.<br />Charge une image.</p> */ public void loadImage() { if (file == null) { thumbnail = null; return; } //Don't use createImageIcon (which is a wrapper for getResource) //because the image we're trying to load is probably not one //of this program's own resources. ImageIcon tmpIcon = new ImageIcon(file.getPath()); if (tmpIcon != null) { if (tmpIcon.getIconWidth() > 90) { thumbnail = new ImageIcon(tmpIcon.getImage() .getScaledInstance(90, -1,Image.SCALE_DEFAULT)); } else { //no need to miniaturize thumbnail = tmpIcon; } } } /** <p>Update the thumbnail if necessary.<br /> * Met à jour la petite image si nécessaire.</p> */ @Override public void propertyChange(PropertyChangeEvent e) { boolean update = false; String prop = e.getPropertyName(); //If the directory changed, don't show an image. if (JFileChooser.DIRECTORY_CHANGED_PROPERTY.equals(prop)) { file = null; update = true; //If a file became selected, find out which one. } else if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(prop)) { file = (File) e.getNewValue(); update = true; } //Update the preview accordingly. if (update) { thumbnail = null; if (isShowing()) { loadImage(); repaint(); } } } /** <p>Paint the thumbnail.<br />Peint la petite image.</p> */ @Override protected void paintComponent(Graphics g) { if (thumbnail == null) { loadImage(); } if (thumbnail != null) { int x = getWidth()/2 - thumbnail.getIconWidth()/2; int y = getHeight()/2 - thumbnail.getIconHeight()/2; if (y < 0) { y = 0; } if (x < 5) { x = 5; } thumbnail.paintIcon(this, g, x, y); } } }