package org.view4;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class ImageView {
private static JLabel lab = new JLabel();
private static JFrame frame ;//= new JFrame();
private static JPanel pan = new JPanel();
private static JButton previous = new JButton("<===");
private static JButton next = new JButton("===>");
private static ArrayList<File> imageList;
private static int len = 0;
private static int point = 0;
public static void init(){
if(frame == null){
frame = new JFrame();
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
double width = dimension.getWidth()*0.8;
double height = dimension.getHeight()*0.8;
frame.setBounds((int)(width*0.1), (int)(height*0.1), (int)width, (int)height);
previous.setPreferredSize(new Dimension(150, 30));
next.setPreferredSize(new Dimension(150, 30));
frame.add(lab, BorderLayout.CENTER);
pan.add(previous);
pan.add(next);
frame.add(pan, BorderLayout.SOUTH);
frame.setFocusable(true);
frame.setVisible(true);
addListen();
}else{
frame.setVisible(true);
}
}
private static void addListen(){
frame.addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent arg0) {
}
@Override
public void windowIconified(WindowEvent arg0) {
}
@Override
public void windowDeiconified(WindowEvent arg0) {
}
@Override
public void windowDeactivated(WindowEvent arg0) {
}
@Override
public void windowClosing(WindowEvent arg0) {
lab.setIcon(null);
frame = null;
System.gc();
}
@Override
public void windowClosed(WindowEvent arg0) {
}
@Override
public void windowActivated(WindowEvent arg0) {
}
});
frame.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_RIGHT){
showNextPhoto();
}else if(e.getKeyCode() == KeyEvent.VK_LEFT){
showPreviousPhoto();
}
frame.requestFocus();
}
});
previous.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
showPreviousPhoto();
frame.requestFocus();
}
});
next.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
showNextPhoto();
frame.requestFocus();
}
});
}
private static void showPreviousPhoto(){
if(point <= 0){
point = len - 1;
}else{
point--;
}
show(point);
// System.out.println("Previous point:"+(point+1));
}
private static void showNextPhoto(){
if(point >= len-1){
point = 0;
}else{
point++;
}
show(point);
// System.out.println("Next point:" + (point+1));
}
public static void showImage(){
init();
show(0);
}
public static void showImage(ArrayList<File> list, String i){
init();
imageList = list;
len = imageList.size();
point = Integer.parseInt(i);
show(point);
}
private static void show(int i){
BufferedImage image;
try {
image = ImageIO.read(imageList.get(i));
// System.out.println(imageList.get(point).getAbsolutePath());
lab.setIcon(new ImageIcon(image));
lab.setHorizontalAlignment(JLabel.CENTER);
frame.setTitle(imageList.get(point).getAbsolutePath().toString());
// frame.setTitle((1+i) + "");
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Error");
e.printStackTrace();
}
}
public static void show(File file){
BufferedImage image;
try {
image = ImageIO.read(file);
lab.setIcon(new ImageIcon(image));
lab.setHorizontalAlignment(JLabel.CENTER);
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Error");
e.printStackTrace();
}
}
public static void hidden(){
if(frame != null){
frame.setVisible(false);
}
}
// public static void main(String[] args) {
// File file = new File("./image/");// ./image/bg2.jpg
// System.out.println(file.exists() + "--------"+ file.getAbsolutePath());
// ImageView.showImage(file);
// }
}
package org.view4;
import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
public class View {
private JFrame frame;
private JButton but;
private JTextField field;
private File filePath ;
private ArrayList<File> imageFileList;
private ShowImage showImage = new ShowImage();
public View(){
this.frame = new JFrame("Photo View");
this.but = new JButton("Browse");
this.field = new JTextField(45);
this.field.setEditable(false);
init();
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
double width = dimension.getWidth()*0.8;
double height = dimension.getHeight()*0.8;
this.frame.setBounds((int)(width*0.1), (int)(height*0.1), (int)width, (int)height);
this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.frame.setVisible(true);
imageFileList = new ArrayList<File>();
addListen();
}
private void init(){
JPanel pan1 = new JPanel();
pan1.add(this.field, BorderLayout.WEST);
pan1.add(this.but, BorderLayout.EAST);
this.frame.add(pan1, BorderLayout.NORTH);
// this.frame.pack();
}
class ShowImage {
// int imageLength = imageFileList.size();
private JPanel pan = new JPanel(new FlowLayout(FlowLayout.CENTER, 20, 20));
private JScrollPane scr = new JScrollPane();
private BufferedImage[] images;
private ImageIcon[] icons;
JLabel[] labs;
private int count = 0;
public void removeAll(){
if(labs != null){
for(int i=0;i<count;i++){
pan.remove(labs[i]);
labs[i] = null;
}
}
System.gc();
}
public void run() {
try {
int length = imageFileList.size();
count = length ;
images = new BufferedImage[length];
icons = new ImageIcon[length];
labs = new JLabel[length];
// Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
// double w = dimension.getWidth();
// double h = dimension.getHeight();
int w = frame.getWidth();
// int h = frame.getHeight();
int w2 = (int)(w/140)*140;
int h2 = (length/(int)(w/140)*140);
pan.setPreferredSize(new Dimension(w2, h2));
for(int i=0; i<length; i++){
images[i] = ImageIO.read(imageFileList.get(i));
int width = 100;
int height = 100;
double scaleWidth = (double)width / (double)images[i].getWidth();
double scaleHeight = (double) height / (double) images[i].getHeight();
BufferedImage dstImage = new BufferedImage(width, height, images[i].getType());
AffineTransform affine = new AffineTransform();
affine.scale(scaleWidth, scaleHeight);
AffineTransformOp affop = new AffineTransformOp(affine, AffineTransformOp.TYPE_BILINEAR);
affop.filter(images[i], dstImage);
icons[i] = new ImageIcon(dstImage);
labs[i] = new JLabel();
labs[i].setIcon(icons[i]);
labs[i].setHorizontalTextPosition(JLabel.CENTER);
labs[i].setCursor(new Cursor(Cursor.HAND_CURSOR));
labs[i].addMouseListener(new MouseListen());
labs[i].setName(String.valueOf(i));
// labs[i].setPreferredSize(new Dimension(100, 100));
pan.add(labs[i]);
// System.out.println("width:"+ icons[i].getIconWidth() + "height:" +icons[i].getIconHeight());
}
// pan.setPreferredSize(new Dimension(300, 300));
// pan.setSize(550, 600);
scr.setViewportView(pan);
scr.setPreferredSize(new Dimension(300, 300));
// pan.setForeground(Color.BLUE);
frame.add(scr, BorderLayout.CENTER);
// frame.pack();
frame.setVisible(true);
} catch (IOException e1) {
e1.printStackTrace();
JOptionPane.showMessageDialog(null, "Error");
} catch(Exception e3){
e3.printStackTrace();
JOptionPane.showMessageDialog(null, "Error");
}
}
class MouseListen extends MouseAdapter{
@Override
public void mouseClicked(MouseEvent e) {
JLabel temp = (JLabel)e.getSource();
ImageView.showImage(imageFileList, temp.getName());
}
}
}
private void addListen(){
this.but.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser(new File("."));
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = chooser.showOpenDialog(frame);
if(returnVal == JFileChooser.APPROVE_OPTION) {
filePath = chooser.getSelectedFile().getAbsoluteFile();
if(filePath == null){
return;
}
imageFileList.clear();
for(File f : filePath.listFiles()){
if(f.getName().endsWith(".jpg")||f.getName().endsWith(".gif")
||f.getName().endsWith(".png")){
imageFileList.add(f);
}
}
if(imageFileList.size() == 0){
JOptionPane.showMessageDialog(null, "There is no format jpg/gif/png photos!");
return;
}
field.setText(filePath.toString());
ImageView.hidden();
showImage.removeAll();
showImage.run();
}
}
});
}
public static void main(String[] args) {
new View();
}
}