您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > JAVA照片查看器源代码
packageioStream;importjava.awt.AWTEvent;importjava.awt.Color;importjava.awt.Graphics;importjava.awt.Graphics2D;importjava.awt.Image;importjava.awt.Toolkit;importjava.awt.event.AWTEventListener;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.KeyEvent;importjava.awt.event.MouseWheelEvent;importjava.awt.event.MouseWheelListener;importjava.awt.geom.AffineTransform;importjava.io.File;importjava.util.LinkedList;importjava.util.List;importjavax.swing.ImageIcon;importjavax.swing.JFileChooser;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.Timer;importjavax.swing.UIManager;importjavax.swing.filechooser.FileNameExtensionFilter;/**该代码意在实现照片查看器的功能*当按下“右箭头”时浏览下一张图片*当按下“左箭头时浏览上一张图片*实现循环浏览*当按下Ecs时推出全屏浏览模式*当按下CTRL+“上箭头”时,全屏显示*只能浏览指定文件夹下面的所支持格式的图片(gif,jpg,png)*链表的大小与他的最大角标相隔1*/publicclassPicsViewer{staticJFrameframe0;//原始的全屏显示的窗口staticintSWidth=Toolkit.getDefaultToolkit().getScreenSize().width;staticintSHeight=Toolkit.getDefaultToolkit().getScreenSize().height;staticImageicon=(newImageIcon(PicsViewer/img.png)).getImage();//框架图标JFileChooserchooser;//声明一个文件选择器对象staticJPanelimgjp;staticImageimg0=(newImageIcon(image/cat.png)).getImage();//默认的一张图片Filefiles;staticintj=0;staticintk=0;staticFileroot;staticinti=0;TimerT00;String[]Str;//获取文件名字符串staticImageimg;staticintxCoor,yCoor;//打印图片的左上角坐标staticintPWidth,PHeight;//图片的宽高(小于屏幕宽高的时候的)staticintPWidth0,PHeight0;//图片宽高大于屏幕宽高的时候的图片宽高StringCPath;//直接获得的路径StringnewPath;//经过转换后的路径staticListImagelist=newLinkedListImage();intindex=0;staticintindex0=0;staticdoublexCoor0=1,yCoor0=1;//图片在X轴缩放的倍数,图片在Y轴的缩放倍数;staticbooleanisFull=true;//是否全屏显示staticintnow;//当前正在使用的图片publicPicsViewer(){frame0=newJFrame();imgjp=newImgsPanel();imgjp.setBackground(newColor(51,51,51));frame0.add(imgjp);frame0.setTitle(PicsViewer1.0);frame0.setSize(SWidth,SHeight);frame0.setUndecorated(isFull);frame0.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//不设置窗口的位置,是因为窗口默认的位置就是在桌面的左上角frame0.setIconImage(icon);//设置窗口图标frame0.setVisible(true);/**程序一启动就弹出文件选择对话框让用户选择所要浏览的图片*/try{UIManager.setLookAndFeel(com.sun.java.swing.plaf.windows.WindowsLookAndFeel);//设置为当前操作系统的外观JFileChooserchooser=newJFileChooser();chooser.setDialogTitle(请选择要查看的图片);chooser.addChoosableFileFilter(newFileNameExtensionFilter(常见图片格式,jpg,gif,png));chooser.showOpenDialog(frame0);intreturnVal=chooser.showOpenDialog(frame0);if(returnVal==JFileChooser.APPROVE_OPTION){img=(newImageIcon(chooser.getSelectedFile().toString())).getImage();CPath=chooser.getCurrentDirectory().toString()+System.getProperty(file.separator);newPath=CPath.replaceAll(\\\\,/);//路径转换root=newFile(newPath);img0=img;imgjp.repaint();findImage(root);}}catch(Exceptionevt){}Toolkittoolkit=Toolkit.getDefaultToolkit();toolkit.addAWTEventListener(newShortcutKeyListener(),AWTEvent.KEY_EVENT_MASK|AWTEvent.MOUSE_EVENT_MASK|AWTEvent.WINDOW_EVENT_MASK);/*添加键盘监听事件,当点击键盘上的方向键右键时浏览下一张图片,点击左箭头浏览上一张,当按下上箭头时对当前图片进行放大操作*当按下下箭头时,对当前浏览的图片进行缩小操作*同时添加鼠标滚轮监听事件,也对当前图片进行缩放操作**/imgjp.addMouseWheelListener(newMouseWheelListener(){publicvoidmouseWheelMoved(MouseWheelEvente){if(e.getWheelRotation()0){//如果鼠标滚轮向上滚动,则放大图片}else{//否则缩小图片}}});}publicvoidfindImage(Filedir){File[]files=dir.listFiles();//得到当前路径下的所有文件和文件夹for(inti=0;ifiles.length;i++){Str=newString[files.length];Str[i]=files[i].getAbsolutePath();//将路径和文件名存入字符串数组//使用链表替代数组if(Str[i].endsWith(.jpg)||Str[i].endsWith(.gif)||Str[i].endsWith(.png)==true){list.add(index,(newImageIcon(Str[i])).getImage());index++;}}}//画图的算法有点问题????staticclassImgsPanelextendsJPanel{privatestaticfinallongserialVersionUID=1L;publicvoidpaintComponent(Graphicsg){super.paintComponent(g);Graphics2DG2=(Graphics2D)g;AffineTransformTrans=newAffineTransform();PWidth=img0.getWidth(null);PHeight=img0.getHeight(null);if(PWidth=SWidth&&PHeight=SHeight){xCoor=(SWidth-PWidth)/2;yCoor=(SHeight-PHeight)/2;PWidth0=PWidth;PHeight0=PHeight;Trans.scale(xCoor0,yCoor0);//对图片的缩放操作//G2.setTransform(Trans);}if(PWidthSWidth||PHeightSHeight){yCoor0=SHeight/(PHeight*1.0);PHeight0=SHeight;PWidth0=(int)(PWidth*yCoor0);xCoor0=yCoor0;xCoor=(SWidth-PWidth0)/2;yCoor=-(PHeight0-SHeight)/2;Trans.scale(xCoor0,yCoor0);//对图片的缩放操作//G2.setTransform(Trans);}G2.drawImage(img0,xCoor,yCoor,PWidth0,PHeight0,this);}}staticclassTimimplementsActionListener{publicvoidactionPerformed(ActionEvente){//看来变量最好不要用相同的变量名img0=(Image)(list.get(index0));index0++;if(index0==list.size()){index0=0;img0=(Image)(list.get(index0));index0++;imgjp.repaint();}imgjp.repaint();}}staticclassShortcutKeyListenerimplementsAWTEventListener{publicvoideventDispatched(AWTEvente){if(e.getClass()==KeyEvent.class){//被处理的事件是键盘事件.KeyEventkeyEvent=(KeyEvent)e;if(keyEvent.getID()==KeyEvent.KEY_PRESSED){keyPressed(keyEvent);}elseif(keyEvent.getID()==KeyEvent.KEY_RELEASED){keyReleased(keyEvent);}}}/**当只有一张图片是抛出异常,不能使用左右方向键,待解决*/privatevoidkeyPressed(KeyEvente){switch(e.getKeyCode()){caseKeyEvent.VK_RIGHT:if(list.size()!=1){img0=(Image)(list.get(index0));now=index0;index0++;if(index0==list.size()-1){index0=0;img0=(Image
本文标题:JAVA照片查看器源代码
链接地址:https://www.777doc.com/doc-5372839 .html