Skip to content

Instantly share code, notes, and snippets.

@dragon0
Created December 1, 2017 22:29
Show Gist options
  • Save dragon0/266788048fcffd27e6fb616fd41cf5af to your computer and use it in GitHub Desktop.
Save dragon0/266788048fcffd27e6fb616fd41cf5af to your computer and use it in GitHub Desktop.
A simple image viewer in Java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ImageViewer implements KeyListener{
private JFrame frame;
private ImageIcon image;
private ImageIcon origImage;
private JLabel imageLabel;
private String[] files;
private int index;
public static void main(String[] args){
ImageViewer imgVwr = new ImageViewer(args);
imgVwr.frame.setVisible(true);
}
public ImageViewer(String[] args){
files = args;
index = 0;
frame = new JFrame("Animated GIF");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.addKeyListener(this);
loadImage();
}
private void loadImage(){
if (imageLabel != null){
frame.getContentPane().remove(imageLabel);
}
if (origImage != null){
origImage.getImage().flush();
}
origImage = new ImageIcon(files[index]);
while(origImage.getImageLoadStatus() == MediaTracker.LOADING){
try{
Thread.sleep(0);
}
catch(InterruptedException e){}
}
if(origImage.getImageLoadStatus() == MediaTracker.ERRORED){
imageLabel = new JLabel("Image load encountered an error");
image = null;
origImage = null;
}
else{
ImageIcon oldImage = image;
image = new ImageIcon(origImage.getImage());
if (oldImage != null){
oldImage.getImage().flush();
}
imageLabel = new JLabel(origImage);
frame.setTitle(files[index]);
}
frame.getContentPane().add(imageLabel);
frame.pack();
}
private void scale(int w, int h){
if(origImage != null){
try{
Image oldImage = image.getImage();
Image img = origImage.getImage()
.getScaledInstance(w, h, Image.SCALE_DEFAULT);
image.setImage(img);
oldImage.flush();
if (imageLabel != null){
frame.getContentPane().remove(imageLabel);
}
imageLabel = new JLabel(image);
frame.getContentPane().add(imageLabel);
frame.pack();
}
catch(IllegalArgumentException e){}
}
}
public void keyPressed(KeyEvent e){
switch(e.getKeyCode()){
case KeyEvent.VK_ESCAPE:
case KeyEvent.VK_Q:
// quit
frame.dispatchEvent(
new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
break;
case KeyEvent.VK_SPACE:
next();
break;
case KeyEvent.VK_B:
prev();
break;
case KeyEvent.VK_ENTER:
case KeyEvent.VK_S:
showName();
break;
case KeyEvent.VK_F:
zoomIn();
break;
case KeyEvent.VK_V:
zoomOut();
break;
default: break;
}
}
public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e){}
private void next(){
index += 1;
index %= files.length;
loadImage();
}
private void prev(){
index -= 1;
while(index < 0){
index += files.length;
}
loadImage();
}
private void showName(){
System.out.println(files[index]);
}
private void zoomIn(){
if(image != null){
int width = (int)(image.getIconWidth() * 1.1);
int height = (int)(image.getIconHeight() * 1.1);
scale(width, height);
}
}
private void zoomOut(){
if(image != null){
int width = (int)(image.getIconWidth() * 0.9);
int height = (int)(image.getIconHeight() * 0.9);
scale(width, height);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment