Java tutorial
//package com.ryanm.util.swing; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.ImageObserver; import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; /** * @author ryanm */ public class ImageSorter extends JFrame { /** * @param args */ public static void main(String[] args) { new ImageSorter(args[0], args[1], args[2]); } private File[] inputs; private int index = -1; private File leftOutput; private File rightOutput; private ImagePanel panel = new ImagePanel(); /** * @param in * @param leftOut * @param rightOut */ public ImageSorter(String in, String leftOut, String rightOut) { super("ImageSorter"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); inputs = new File(in).listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { String s = name.toLowerCase(); return s.endsWith("jpg"); } }); leftOutput = new File(in, leftOut); rightOutput = new File(in, rightOut); leftOutput.mkdirs(); rightOutput.mkdirs(); assert leftOutput.canWrite(); assert rightOutput.canWrite(); panel.setPreferredSize(new Dimension(640, 480)); getContentPane().setLayout(new BorderLayout()); getContentPane().add(panel, BorderLayout.CENTER); panel.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_RIGHT) { inputs[index].renameTo(new File(rightOutput, inputs[index].getName())); } else if (e.getKeyCode() == KeyEvent.VK_LEFT) { inputs[index].renameTo(new File(leftOutput, inputs[index].getName())); } nextImage(); } }); panel.addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { panel.requestFocusInWindow(); } @Override public void mousePressed(MouseEvent e) { panel.requestFocusInWindow(); } @Override public void mouseEntered(MouseEvent e) { panel.requestFocusInWindow(); } @Override public void mouseClicked(MouseEvent e) { panel.requestFocusInWindow(); } }); panel.requestFocusInWindow(); nextImage(); pack(); setVisible(true); } private void nextImage() { index++; if (index >= inputs.length) { System.exit(0); } try { panel.image = ImageIO.read(inputs[index]); panel.repaint(); } catch (IOException e) { e.printStackTrace(); } } private class ImagePanel extends JPanel { private Image image = null; @Override public void paint(Graphics g) { g.setColor(Color.LIGHT_GRAY); g.fillRect(0, 0, getWidth(), getHeight()); if (image != null) { g.drawImage(image, 0, 0, new ImageObserver() { @Override public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) { repaint(); return infoflags == ALLBITS; } }); } g.setColor(Color.BLACK); g.drawString(inputs[index].getName(), 10, getHeight() - 10); } } }