package mods.custom_flags.utils.swing;
import javax.swing.*;
import java.awt.*;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
public class ImagePreviewPanel extends JPanel
implements PropertyChangeListener {
private int width, height;
private ImageIcon icon;
private Image image;
private static final int ACCSIZE = 155;
private Color bg;
public ImagePreviewPanel() {
setPreferredSize(new Dimension(ACCSIZE, -1));
bg = getBackground();
}
public void propertyChange(PropertyChangeEvent e) {
String propertyName = e.getPropertyName();
if (propertyName.equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)) {
File selection = (File)e.getNewValue();
String name;
if (selection == null)
return;
else
name = selection.getAbsolutePath();
if ((name != null) &&
name.toLowerCase().endsWith(".jpg") ||
name.toLowerCase().endsWith(".jpeg") ||
name.toLowerCase().endsWith(".gif") ||
name.toLowerCase().endsWith(".png")) {
icon = new ImageIcon(name);
image = icon.getImage();
scaleImage();
repaint();
}
}
}
private void scaleImage() {
width = image.getWidth(this);
height = image.getHeight(this);
double ratio = 1.0;
if (width >= height) {
ratio = (double)(ACCSIZE-5) / width;
width = ACCSIZE-5;
height = (int)(height * ratio);
}
else {
if (getHeight() > 150) {
ratio = (double)(ACCSIZE-5) / height;
height = ACCSIZE-5;
width = (int)(width * ratio);
}
else {
ratio = (double)getHeight() / height;
height = getHeight();
width = (int)(width * ratio);
}
}
image = image.getScaledInstance(width, height, Image.SCALE_DEFAULT);
}
public void paintComponent(Graphics g) {
g.setColor(bg);
g.fillRect(0, 0, ACCSIZE, getHeight());
g.drawImage(image, getWidth() / 2 - width / 2 + 5,
getHeight() / 2 - height / 2, this);
}
}