Heim  >  Artikel  >  Java  >  Java-Bildbetrachter

Java-Bildbetrachter

大家讲道理
大家讲道理Original
2016-11-10 10:49:511575Durchsuche

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

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

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


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn