Home > Java > javaTutorial > body text

Java image viewer

大家讲道理
Release: 2016-11-10 10:49:51
Original
1572 people have browsed it

MyCanvas.java

package PictureViewer;
  
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
public class MyCanvas extends Canvas implements ComponentListener{
    private BufferedImage bi;
    private Image im;
    private int image_width;
    private int image_height;
    public void setImage(BufferedImage bi){
        this.bi = bi;
        this.zoom();
    }
    public void paint(Graphics g){
        g.drawImage(im,(this.getWidth()-image_width)/2,(this.getHeight()-image_height)/2,this);
    }
    public void componentResized(ComponentEvent e){
        if(bi != null){
            System.out.println("resize!!");
              
            this.zoom();
            this.repaint();
        }
    }   
    public void componentMoved(ComponentEvent e){}
    public void componentShown(ComponentEvent e){}
    public void componentHidden(ComponentEvent e){}
    public void zoom(){
        if(bi == null)
            return;
        int screen_width = this.getWidth();
        int screen_height = this.getHeight();
        double screen_proportion = 1.0 * screen_height / screen_width;  
        System.out.println("screen: w "+screen_width+" ,h "+screen_height+" ,p0 "+screen_proportion);
          
        image_width = bi.getWidth(this);
        image_height = bi.getHeight(this);
        double image_proportion = 1.0 * image_height / image_width;
        System.out.println("image: w "+image_width+" ,h "+image_height+" ,p1 "+image_proportion);
          
        if(image_proportion > screen_proportion){
            image_height = screen_height;
            image_width = (int)(image_height / image_proportion);   
            System.out.println("  p1>p0  w= "+image_width);
        }else{
            image_width = screen_width;
            image_height = (int)(image_width * image_proportion);   
            System.out.println("  p0>p1  h= "+image_height);
        }
        im = bi.getScaledInstance(image_width,image_height,Image.SCALE_SMOOTH);
    }
      
}
Copy after login

MyFilter.java

package PictureViewer;
  
import java.io.File;
import java.io.FilenameFilter;
  
public class MyFilter implements FilenameFilter{
    private String[] extension;  
    public MyFilter(){
        extension = new String[]{".jpg", ".JPG", ".gif", ".GIF", ".png", ".PNG", ".jpeg", ".JPEG"};
    }
    public MyFilter(String[] extension){
        this.extension = extension;
    }
    public boolean accept(File dir,String name){
        for(String s : extension){
            if(name.endsWith(s)){
                return true;   
            }
        }  
        return  false;
    }  
}
Copy after login

PictureViewer.java

package PictureViewer;
  
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
  
public class PictureViewer implements ActionListener{
    private Frame frame;
    private MyCanvas mc ;
    private String fpath;
    private String fname;
    private File[] files;
    private int findex ;
    private FileDialog fd_load; 
    private MyFilter filter;
    private Button previous ;
    private Button next ;
    public static void main( String args[]) throws Exception {
        new PictureViewer().init();
    }
    public void init(){
        frame = new Frame("PictureViewer");
        Panel pb = new Panel();
        Button select = new Button("选择图片");
        previous = new Button("上一张");
        next = new Button("下一张");
        select.addActionListener(this);
        previous.addActionListener(this);
        next.addActionListener(this);
        pb.add(select);
        pb.add(previous);
        pb.add(next); 
        mc = new MyCanvas();
        mc.setBackground(new Color(200,210,230));
        mc.addComponentListener(mc);
        frame.add(pb,"North");
        frame.add(mc,"Center");
        frame.setSize(360,360);
        frame.setLocation(400,200);
        frame.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                System.exit(0); 
            }   
        });  
        frame.setVisible(true); 
        this.validateButton();
        filter = new MyFilter();
        fd_load = new FileDialog(frame,"打开文件",FileDialog.LOAD);
        fd_load.setFilenameFilter(filter);
    }
      
    public void actionPerformed(ActionEvent e){
        String command = e.getActionCommand();
        if(command.equals("选择图片")){
            fd_load.setVisible(true);
            fpath = fd_load.getDirectory();
            fname = fd_load.getFile();
            if((fpath != null) && (fname != null)){
                this.display(new File(fpath + fname));  
                files = new File(fpath).listFiles(filter);
                this.setIndex();
            }           
        }else if(command.equals("上一张")){
            findex--;
            if(findex<0)
                findex = 0;
            this.display(files[findex]);
        }else if(command.equals("下一张")){
            findex++;
            if(findex >= files.length)
                findex = files.length-1;
            this.display(files[findex]);
        }
        this.validateButton();
    }   
    public void display(File f){
        try{
            BufferedImage bi = ImageIO.read(f);
            mc.setImage(bi);
            frame.setTitle("PictureViewer - [" +  f.getName() + "]");
        }catch(Exception e){
            e.printStackTrace();    
        }
        mc.repaint();
    }
    public void setIndex(){
        File current = new File(fpath + fname); 
        if(files != null){
            for(int i=0;i<files.length;i++){
                if(current.equals(files[i])){
                    findex = i; 
                }   
            }           
        }
    }
    public void validateButton(){
        previous.setEnabled((files!=null) && (findex > 0));
        next.setEnabled((files!=null) && (findex<(files.length-1))); 
    }
}
Copy after login


source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template