⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 picshow.java

📁 利用Java编程制作的小软件 看图软件 简单适合初学者参考学习
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.util.*;
import java.io.*;
import java.applet.*;


class MyMenu   extends Frame   implements ActionListener, KeyListener {
	
  public String[] plist;
  Image myImage;
  boolean haveImage = false;
  //用来设置图片大小
  double n = 1.0;
  //用来设置要播放的名字的变量
  public int i;
  String j = "jpg";
  //声明一个公共变量用来保存openPic中的获取的目录,以便在showPic方法中调用
  public String dir;
  public MyMenu(String s) {
    super(s);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        dispose();
        System.exit(0);
      }
    });
    Menu mn = new Menu("文件");
    MenuItem miOpen = new MenuItem("打开");
    MenuItem miExit = new MenuItem("退出");
    mn.add(miOpen);
    mn.addSeparator();
    mn.add(miExit);
    miOpen.addActionListener(this);
    miExit.addActionListener(this);
    
    addKeyListener(this);

    Menu mn1 = new Menu("查看");
    Menu mn2 = new Menu("缩放");
    MenuItem up = new MenuItem("前一张");
    MenuItem back = new MenuItem("后一张");
    MenuItem miZoomin = new MenuItem("放大 (+)");
    MenuItem miZoomout = new MenuItem("缩小 (-)");
    MenuItem miZoom = new MenuItem("还原");
    mn1.add(mn2);
    mn2.add(miZoomin);
    mn2.add(miZoom);
    mn2.add(miZoomout);
    mn1.addSeparator();
    mn1.add(up);
    mn1.add(back);
    up.addActionListener(this);
    back.addActionListener(this);
    miZoomin.addActionListener(this);
    miZoom.addActionListener(this);
    miZoomout.addActionListener(this);

    MenuBar mb = new MenuBar();
    mb.add(mn);
    mb.add(mn1);
    setMenuBar(mb);
    setSize(400, 300);
    setVisible(true);
  }

  public void actionPerformed(ActionEvent e) {
    String strCmd = e.getActionCommand();
    if (strCmd.equals("退出")) {
      System.exit(0);
    }
    if (strCmd.equals("打开")) {
      openPic();
    }
    if (strCmd.equals("放大 (+)")) {
      n *= 1.2;
    }
    if (strCmd.equals("缩小 (-)")) {
      n *= 0.8;
    }
    if (strCmd.equals("还原")) {
      n = 1.0;
    }
    if (strCmd.equals("前一张")) {
      i--;
      showPic();
    }
    if (strCmd.equals("后一张")) {
      i++;
      showPic();
    }
    repaint();
  }

  public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_DOWN) {
      i++;
      showPic();
    }
    if (e.getKeyCode() == KeyEvent.VK_UP) {
      i--;
      showPic();
    }
    if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
      n *= 1.2;
    }
    if (e.getKeyCode() == KeyEvent.VK_LEFT) {
      n *= 0.8;
    }
    if (e.getKeyCode() == KeyEvent.VK_SPACE) {
      n = 1;
    }
    
    repaint();
  }

  public void keyTyped(KeyEvent e) {}

  public void keyReleased(KeyEvent e) {}

  public void openPic() {

    String picfilename = "",picname="",picdir = "";
    FileDialog fd = new FileDialog(this, "Picture File");
    fd.setVisible(true);
    picdir = fd.getDirectory();
    //把图片路径给公共变量DIR
    dir = picdir;
    picfilename = fd.getFile();
    picname = picdir + picfilename;
    File d = new File(dir);
    plist = d.list(new dir(j));
    Arrays.sort(plist);
    //找到变量I所对应的当前获取的图片名称
    for (int w = 0; w < plist.length; w++) {
      if (plist[w].equals( picfilename)) {
        i = w;
      }
    }

    if (picfilename.endsWith("jpg")) {
      showPic(picname);
    }
    else {
      haveImage = false;
      repaint();
    }
    System.out.println("File name: " + picname+"i="+i);

  }

  //显示前一张或下一张图片的图片
  public void showPic() {
    String picname="";
    try {
      //当播放到图片最后一张时自动跳转到第一张
      if (i == plist.length) {
        i = 0;
      }
      //当播放到图片第一张时自动跳转到最后一张
      if (i < 0) {
        i = plist.length;
      }
      picname = dir + plist[i];
      showPic(picname);
      System.out.println("File name: " + picname+"i="+i);
    }
    catch (ArrayIndexOutOfBoundsException e) {}
  }

  public void showPic(String picname) {
    Toolkit t = getToolkit();
    myImage = t.getImage(picname);
    haveImage = true;
    repaint();
  }

  public void paint(Graphics g) {
    if (haveImage) {
      Image imageBuffer = createImage(getSize().width, getSize().height);
      Graphics gBuffer = imageBuffer.getGraphics();
      gBuffer.drawImage(myImage, 0, 40, this);
      gBuffer.dispose();
      g.drawImage(imageBuffer, 0, 0, (int) (n * imageBuffer.getWidth(this)),
                  (int) (n * imageBuffer.getHeight(this)), this);
    }
  }

  public boolean imageUpdate(Image img, int infoflags, int x, int y, int width,
                             int height) {
    if ( (infoflags & ImageObserver.ALLBITS) != 0) {
      repaint();
      return false;
    }
    return true;
  }
}

//程序入口
public class PicShow {
  public static void main(String[] args) {
    MyMenu myMenu = new MyMenu("图片显示程序");
  }
}

//定义实现了文件名过滤器FilenameFilter接口的类
//把ACCEPT()方法中返回的TURE的文件名过滤出来
class dir
    implements FilenameFilter {
  String jpg;
  dir(String jpg) {
    this.jpg = jpg;

  }

  public boolean accept(File x, String y) {
    return y.endsWith("." + jpg);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -