图片查看器

来源:互联网 发布:sat2数学 真题 淘宝 编辑:程序博客网 时间:2024/05/01 06:03



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() {@Overridepublic void windowOpened(WindowEvent arg0) {}@Overridepublic void windowIconified(WindowEvent arg0) {}@Overridepublic void windowDeiconified(WindowEvent arg0) {}@Overridepublic void windowDeactivated(WindowEvent arg0) {}@Overridepublic void windowClosing(WindowEvent arg0) {lab.setIcon(null);frame = null;System.gc();}@Overridepublic void windowClosed(WindowEvent arg0) {}@Overridepublic void windowActivated(WindowEvent arg0) {}});frame.addKeyListener(new KeyListener() {@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic void keyReleased(KeyEvent e) {}@Overridepublic 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{@Overridepublic void mouseClicked(MouseEvent e) {JLabel temp = (JLabel)e.getSource();ImageView.showImage(imageFileList, temp.getName());}}}private void addListen(){this.but.addActionListener(new ActionListener() {@Overridepublic 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();}}






原创粉丝点击