2024年2月19日发(作者:)

package ioStream;

import nt;

import ;

import cs;

import cs2D;

import ;

import t;

import ntListener;

import Event;

import Listener;

import nt;

import heelEvent;

import heelListener;

import Transform;

import ;

import List;

import ;

import con;

import hooser;

import ;

import ;

import ;

import ger;

import meExtensionFilter;

/*

* 该代码意在实现照片查看器的功能

* 当按下“右箭头”时浏览下一张图片

* 当按下“左箭头"时浏览上一张图片

* 实现循环浏览

* 当按下"Ecs"时推出全屏浏览模式

* 当按下CTRL+“上箭头”时,全屏显示

* 只能浏览指定文件夹下面的所支持格式的图片(gif,jpg,png)

*链表的大小与他的最大角标相隔1

*/

public class PicsViewer {

static JFrame frame0;//原始的全屏显示的窗口

static int SWidth=aultToolkit().getScreenSize().width;

static int SHeight=aultToolkit().getScreenSize().height;

static Image icon=(new ImageIcon("PicsViewer/")).getImage();//框架图标

JFileChooser chooser; //声明一个文件选择器对象

static JPanel imgjp;

static Image img0=(new ImageIcon("image/")).getImage();//默认的一张图片

File files;

static int j=0;

static int k=0;

static File root;

static int i=0;

Timer T00;

String[] Str;//获取文件名字符串

static Image img;

static int xCoor,yCoor;//打印图片的左上角坐标

static int PWidth,PHeight;//图片的宽高(小于屏幕宽高的时候的)

static int PWidth0,PHeight0;//图片宽高大于屏幕宽高的时候的图片宽高

String CPath;//直接获得的路径

String newPath;//经过转换后的路径

static List list=new LinkedList();

int index=0;

static int index0=0;

static double xCoor0=1,yCoor0=1;//图片在X轴缩放的倍数,图片在Y轴的缩放倍数;

static boolean isFull=true;//是否全屏显示

static int now;//当前正在使用的图片

public PicsViewer(){

frame0=new JFrame();

imgjp=new ImgsPanel();

kground(new Color(51,51,51));

(imgjp);

le("PicsViewer1.0");

e(SWidth,SHeight);

ecorated(isFull);

aultCloseOperation(_ON_CLOSE);

//不设置窗口的位置,是因为窗口默认的位置就是在桌面的左上角

nImage(icon);//设置窗口图标

ible(true);

/*

* 程序一启动就弹出文件选择对话框让用户选择所要浏览的图片

*/

try {

kAndFeel("sLookAndFeel");//设置为当前操作系统的外观

JFileChooser chooser = new JFileChooser();

logTitle("请选择要查看的图片");

osableFileFilter(new FileNameExtensionFilter("常见图片格式", "jpg", "gif", "png"));

enDialog(frame0);

int returnVal = enDialog(frame0);

if(returnVal == E_OPTION) {

img=(new ImageIcon(ectedFile().toString())).getImage();

CPath=rentDirectory().toString()+perty("tor");

newPath=eAll("","/");//路径转换

}

root=new File(newPath);

img0=img;

t();

findImage(root);

} catch (Exception evt) {}

Toolkit toolkit = aultToolkit();

EventListener(new ShortcutKeyListener(), _EVENT_MASK |

_EVENT_MASK| _EVENT_MASK);

/*添加键盘监听事件,当点击键盘上的方向键右键时浏览下一张图片,点击左箭头浏览上一张,当按下上箭头时对当前图片进行放大操作

* 当按下下箭头时,对当前浏览的图片进行缩小操作

* 同时添加鼠标滚轮监听事件,也对当前图片进行缩放操作

*

*/

seWheelListener(new MouseWheelListener(){

public void mouseWheelMoved(MouseWheelEvent e){

if(elRotation()<0){//如果鼠标滚轮向上滚动,则放大图片

});

}

}

}else{//否则缩小图片

}

public void findImage(File dir){

File[] files=les();//得到当前路径下的所有文件和文件夹

for(int i=0; i<; i++){

}

}

//画图的算法有点问题????

static class ImgsPanel extends JPanel{

private static final long serialVersionUID = 1L;

public void paintComponent(Graphics g){

omponent(g);

Graphics2D G2=(Graphics2D)g;

AffineTransform Trans=new AffineTransform();

PWidth=th(null);

PHeight=ght(null);

Str=new String[];

Str[i]=files[i].getAbsolutePath();//将路径和文件名存入字符串数组

//使用链表替代数组

if(Str[i].endsWith(".jpg")||Str[i].endsWith(".gif")||Str[i].endsWith(".png")==true){

(index,(new ImageIcon(Str[i])).getImage());

index++;

}

if(PWidth<=SWidth&&PHeight<=SHeight){

xCoor=(SWidth-PWidth)/2;

yCoor=(SHeight-PHeight)/2;

PWidth0=PWidth;

PHeight0=PHeight;

(xCoor0,yCoor0);//对图片的缩放操作

// nsform(Trans);

}

if(PWidth>SWidth||PHeight>SHeight){

yCoor0=SHeight/(PHeight*1.0);

PHeight0=SHeight;

PWidth0=(int)(PWidth*yCoor0);

xCoor0=yCoor0;

xCoor=(SWidth-PWidth0)/2;

yCoor=-(PHeight0-SHeight)/2;

(xCoor0,yCoor0);//对图片的缩放操作

// nsform(Trans);

}

}

age(img0,xCoor,yCoor,PWidth0,PHeight0,this);

}

static class Tim implements ActionListener{

public void actionPerformed(ActionEvent e){

}

//看来变量最好不要用相同的变量名

img0=(Image)((index0));

index0++;

if(index0==()){

index0=0;

img0=(Image)((index0));

index0++;

t();

}

t();

}

static class ShortcutKeyListener implements AWTEventListener {

public void eventDispatched(AWTEvent e) {

if (ss() == ) {

// 被处理的事件是键盘事件.

KeyEvent keyEvent = (KeyEvent) e;

if (() == _PRESSED) {

keyPressed(keyEvent);

} else if (() == _RELEASED) {

keyReleased(keyEvent);

}

}

}

/*

* 当只有一张图片是抛出异常,不能使用左右方向键,待解决

*/

private void keyPressed(KeyEvent e) {

switch(Code()){

case _RIGHT: if(()!=1){

img0=(Image)((index0));now=index0;index0++;

if(index0==()-1){

index0=0;

img0=(Image)((index0));

now=index0;

index0++;

t();

}t();

}else{

img0=(Image)((index0));

t();

}break;

case _LEFT:

if(()!=1){

if(index0>0){

img0=(Image)((index0));now=index0;index0--;

t();

}

if(index0<0){

index0=()-1;

img0=(Image)((index0));now=index0;index0--;

t();

}

}else{

index0=()-1;

img0=(Image)((index0));now=index0;index0--;

t();

}break;

case _ESCAPE:isFull=false;

frame0=new JFrame();

imgjp=new ImgsPanel();

kground(new Color(51,51,51));

(imgjp);

le("PicsViewer1.0");

e(SWidth,SHeight);

ecorated(isFull);

aultCloseOperation(_ON_CLOSE);

nImage(icon);//设置窗口图标

ible(true);

break;

}

if ((rolDown() == true)

&& (Code() == _UP)) { isFull=true;

frame0=new JFrame();

imgjp=new ImgsPanel();

kground(new Color(51,51,51));

(imgjp);

le("PicsViewer1.0");

e(SWidth,SHeight);

ecorated(isFull);

aultCloseOperation(_ON_CLOSE);

nImage(icon);

ible(true);

}

}

private void keyReleased(KeyEvent event) {

}

}

public static void main(String[] args){

new PicsViewer();

}

}