From 697bc0bae293a9f31c00f6e10f33955151228f64 Mon Sep 17 00:00:00 2001 From: Benjamin Culkin Date: Wed, 25 Apr 2018 12:52:52 -0700 Subject: Initial commit --- src/bjc/imgchain/ImgViewer.java | 200 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 src/bjc/imgchain/ImgViewer.java (limited to 'src/bjc/imgchain/ImgViewer.java') diff --git a/src/bjc/imgchain/ImgViewer.java b/src/bjc/imgchain/ImgViewer.java new file mode 100644 index 0000000..39586a8 --- /dev/null +++ b/src/bjc/imgchain/ImgViewer.java @@ -0,0 +1,200 @@ +package bjc.imgchain; + +import java.awt.GridLayout; +import java.awt.Image; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import javax.imageio.ImageIO; +import javax.swing.*; + +import bjc.imgchain.utils.SimpleInputPanel; + +public class ImgViewer extends JInternalFrame { + private final class ScaleImageListener implements ActionListener { + @Override + public void actionPerformed(ActionEvent ev) { + int height = Integer.parseInt(JOptionPane.showInputDialog("Enter new image height")); + int width = Integer.parseInt(JOptionPane.showInputDialog("Enter new image width")); + + icon.setImage(icon.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT)); + + repaint(); + } + } + + private final class ReloadImageListener implements ActionListener { + private final File img; + + private ReloadImageListener(File img) { + this.img = img; + } + + @Override + public void actionPerformed(ActionEvent ev) { + try { + icon.setImage(ImageIO.read(img)); + } catch (IOException e) { + String msg = String.format("Error: Could not load image %s", img.getPath()); + + System.out.printf("%s\n", msg); + + e.printStackTrace(); + + JOptionPane.showInternalMessageDialog(ImgViewer.this, msg, "Error loading image", + JOptionPane.ERROR_MESSAGE); + } + } + } + + private final class ChangeImageListener implements ActionListener { + @Override + public void actionPerformed(ActionEvent ev) { + JFileChooser jfc = new JFileChooser(); + jfc.setMultiSelectionEnabled(false); + + int res = jfc.showOpenDialog(ImgViewer.this); + + if (res != JFileChooser.APPROVE_OPTION) { + return; + } + + try { + File tmp = jfc.getSelectedFile(); + + icon.setImage(ImageIO.read(tmp)); + + img = tmp; + } catch (IOException e) { + String msg = String.format("Error: Could not load image %s", img.getPath()); + + System.out.printf("%s\n", msg); + + e.printStackTrace(); + + JOptionPane.showInternalMessageDialog(null, msg, "Error loading image", + JOptionPane.ERROR_MESSAGE); + } + } + } + + private static final long serialVersionUID = -4727584150861526435L; + + private File img; + + private boolean initted; + + private ImageIcon icon; + + private ImgChain desktop; + + public ImgViewer(ImgChain desk, File img) { + super("Image Viewer - " + img.getName(), true, true, true, true); + initted = false; + + this.img = img; + this.desktop = desk; + + initted = setupGUI(img); + } + + private boolean setupGUI(File img) { + setSize(320, 240); + setLayout(new GridLayout(1, 1)); + + JMenuBar bar = setupMenubar(img); + + setJMenuBar(bar); + + JLabel lab = loadLabel(img); + if (lab == null) { + return false; + } + + add(lab); + + return true; + } + + private JMenuBar setupMenubar(File img) { + JMenuBar bar = new JMenuBar(); + + JMenu fileMenu = new JMenu("File"); + fileMenu.setMnemonic('F'); + + JMenuItem changeImage = new JMenuItem("Change Image"); + changeImage.setMnemonic('C'); + changeImage.addActionListener(new ChangeImageListener()); + + JMenuItem reloadImage = new JMenuItem("Reload Image"); + reloadImage.setMnemonic('R'); + reloadImage.addActionListener(new ReloadImageListener(img)); + + JMenuItem storeImage = new JMenuItem("Store Image"); + storeImage.setMnemonic('S'); + storeImage.addActionListener((ev) -> { + String inp = JOptionPane.showInternalInputDialog(this, "Enter name to store image under"); + + if(inp == null) return; + + inp = inp.trim(); + + if(inp.equals("")) { + return; + } + + desktop.addImage(inp, icon.getImage()); + }); + + fileMenu.add(changeImage); + fileMenu.add(reloadImage); + fileMenu.addSeparator(); + fileMenu.add(storeImage); + + JMenu editMenu = new JMenu("Edit Image"); + editMenu.setMnemonic('E'); + + JMenuItem scaleImage = new JMenuItem("Scale Image"); + scaleImage.setMnemonic('S'); + scaleImage.addActionListener(new ScaleImageListener()); + + editMenu.add(scaleImage); + + bar.add(fileMenu); + bar.add(editMenu); + return bar; + } + + private JLabel loadLabel(File img) { + JLabel lab = null; + + try { + URL imgURL = img.toURI().toURL(); + + icon = new ImageIcon(imgURL); + + setSize(icon.getIconWidth(), icon.getIconHeight()); + + lab = new JLabel(icon); + } catch (MalformedURLException e) { + String msg = String.format("Error: Could not load image %s", img.getPath()); + + System.out.printf("%s\n", msg); + + e.printStackTrace(); + + JOptionPane.showInternalMessageDialog(this, msg, "Error loading image", + JOptionPane.ERROR_MESSAGE); + } + + return lab; + } + + public boolean isInitialized() { + return initted; + } +} -- cgit v1.2.3