/**
* Copyright (c) 2009 - 2010 AppWork UG(haftungsbeschränkt) <e-mail@appwork.org>
*
* This file is part of org.appwork.utils.swing.dialog
*
* This software is licensed under the Artistic License 2.0,
* see the LICENSE file or http://www.opensource.org/licenses/artistic-license-2.0.php
* for details
*/
package org.appwork.utils.swing.dialog;
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import net.miginfocom.swing.MigLayout;
import org.appwork.utils.Files;
import org.appwork.utils.ImageProvider.ImageProvider;
import org.appwork.utils.swing.EDTHelper;
/**
* @author thomas
*/
public class FilePreview extends JPanel implements PropertyChangeListener {
private static final long serialVersionUID = 68064282036848471L;
private final JFileChooser fileChooser;
private final JPanel panel;
private final JLabel label;
private File file;
public FilePreview(final JFileChooser fileChooser) {
this.fileChooser = fileChooser;
this.fileChooser.addPropertyChangeListener(this);
panel = new JPanel(new MigLayout("ins 5", "[grow,fill]", "[grow,fill]"));
panel.add(label = new JLabel());
setLayout(new MigLayout("ins 0", "[grow,fill]", "[grow,fill]"));
this.add(new JScrollPane(panel), "hidemode 3,gapleft 5");
setPreferredSize(new Dimension(200, 100));
}
public void propertyChange(final PropertyChangeEvent e) {
if (JFileChooser.DIRECTORY_CHANGED_PROPERTY.equals(e.getPropertyName())) {
file = (File) e.getNewValue();
} else if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(e.getPropertyName())) {
file = (File) e.getNewValue();
}
new Thread() {
@Override
public void run() {
update();
}
}.start();
}
private void update() {
if (file != null && file.isFile()) {
try {
final String ext = Files.getExtension(file.getName());
if (ext != null) {
BufferedImage image = null;
if (ext.equalsIgnoreCase("png") || ext.equalsIgnoreCase("jpg") || ext.equalsIgnoreCase("gif")) {
image = ImageIO.read(file);
}
if (image != null) {
final ImageIcon ii = new ImageIcon(ImageProvider.scaleBufferedImage(image, 160, 160));
new EDTHelper<Object>() {
@Override
public Object edtRun() {
label.setIcon(ii);
final int w = fileChooser.getWidth() / 3;
setPreferredSize(new Dimension(w, 100));
fileChooser.revalidate();
return null;
}
}.start();
return;
}
}
} catch (final Throwable e) {
e.printStackTrace();
}
}
new EDTHelper<Object>() {
@Override
public Object edtRun() {
label.setIcon(null);
label.setText("");
setPreferredSize(new Dimension(0, 0));
fileChooser.revalidate();
return null;
}
}.start();
}
}