Image Sorter frame
//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 );
}
}
}
Related examples in the same category