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
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();
}
}


发布评论