`
zhuwei2008
  • 浏览: 83278 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javaAwt 实现照片浏览(初学者)

    博客分类:
  • java
阅读更多

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FilenameFilter;

import javax.imageio.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) {
  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,BorderLayout.NORTH);
  frame.add(mc,BorderLayout.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);
 }
 @Override
 public void actionPerformed(ActionEvent e) {
  // TODO Auto-generated method stub
  String commond=e.getActionCommand();
  if(commond.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(commond.equals("上一张")){
   findex--;
   if(findex<0)
    findex=0;
   this.display(files[findex]);
  }else if(commond.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))));
 }
}
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){
   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; 
  image_width = bi.getWidth(this);
  image_height = bi.getHeight(this);
  double image_proportion = 1.0 * image_height / image_width;
  if(image_proportion > screen_proportion){
   image_height = screen_height;
   image_width = (int)(image_height / image_proportion); 
  }else{
   image_width = screen_width;
   image_height = (int)(image_width * image_proportion);  
  }
  im = bi.getScaledInstance(image_width,image_height,Image.SCALE_SMOOTH);
 }


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

分享到:
评论
1 楼 yexin218 2010-04-20  
代码要格式化下,用编辑器里面代码工具
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FilenameFilter;

import javax.imageio.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) {
  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,BorderLayout.NORTH);
  frame.add(mc,BorderLayout.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);
 }
 @Override
 public void actionPerformed(ActionEvent e) {
  // TODO Auto-generated method stub
  String commond=e.getActionCommand();
  if(commond.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(commond.equals("上一张")){
   findex--;
   if(findex<0)
    findex=0;
   this.display(files[findex]);
  }else if(commond.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))));
 }
}
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){
   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; 
  image_width = bi.getWidth(this);
  image_height = bi.getHeight(this);
  double image_proportion = 1.0 * image_height / image_width;
  if(image_proportion > screen_proportion){
   image_height = screen_height;
   image_width = (int)(image_height / image_proportion); 
  }else{
   image_width = screen_width;
   image_height = (int)(image_width * image_proportion);  
  }
  im = bi.getScaledInstance(image_width,image_height,Image.SCALE_SMOOTH);
 }

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

相关推荐

    java AWT实现简单画图器(可打开、保存、清除界面、选择颜色等)

    Java AWT库是Java平台标准版(Java SE)的一部分,用于构建图形用户界面(GUI)。在本项目中,我们利用AWT(Abstract Window Toolkit)来创建一个简单的画图器,它具备基本的绘图功能,如绘制线条、圆形和矩形,并...

    嵌入式系统中Java AWT的实现.pdf

    "嵌入式系统中Java AWT的实现" 嵌入式系统中Java AWT的实现是指在嵌入式系统中使用Java语言和AWT(Abstract Window Toolkit)技术来实现图形用户界面。Java AWT是一种使用Java语言编写的图形用户界面库,提供了丰富...

    JAVA AWT学习手册

    AWT(Abstract Window Toolkit),即抽象窗口工具包,是Java API为Java程序提供的建立图形用户界面的基本工具集,AWT可以用于Java Application和Java Applet的图形用户界面的创建。 AWT工具集简介 AWT工具集是Java ...

    awt包java Android

    awt包java Android awt包java Android awt包java Android awt包java Android awt包java Android awt包java Android awt包java Android awt包java Android awt包java Android awt包java Android awt包java Android ...

    java awt、Swing实现中国象棋可联机版本采用面向对象思想

    采用面向对象的思路,实现中国象棋可联机版本,适合初学者,以及对面向对象有更深层次理解的开发者或者同学。 使用原生的java awt、Swing进行窗口式开发 将素材文件夹放在D:\Game路径下 两个工程直接导入Eclipse,...

    Java AWT组件综合练习

    Java AWT(Abstract Window Toolkit)是Java早期的图形用户界面(GUI)库,它提供了创建和管理窗口、按钮、文本区域等元素的基本组件。在Java AWT中,开发者可以构建丰富的交互式应用程序。本综合练习旨在帮助你深入...

    嵌入式系统中Java+AWT的实现.

    本论文在剖析Java虚拟机内部实现机 制的基础上,着重讨论了在嵌入式系统中实现AWT技术的过程。并且在实现AWT技术的 基础上,讨论了如何根据J2ME规范来进行AWT类库的构建。 是一篇很好的学习论文。

    java awt 事件处理

    Java AWT(Abstract Window ...总结来说,Java AWT事件处理是构建交互式图形用户界面的关键,理解事件源、事件、监听器和事件处理方法的概念,以及如何在代码中实现它们,对于任何Java GUI开发者都是至关重要的。

    java awt实现读取和生成excel

    Java AWT库是Java早期提供的一种图形用户界面(GUI)工具包,主要用于创建窗口和其他交互元素。虽然在现代Java开发中,Swing和JavaFX更常用于构建GUI应用,但AWT仍然是理解Java与文件系统交互的基础。在这个场景中,...

    弹球游戏 JavaAWT制作

    综上所述,"弹球游戏 JavaAWT制作"项目涵盖了JavaAWT的核心技术,从基本的GUI组件创建到复杂的动画实现、事件处理和游戏逻辑。开发者通过这些技术,创造了一个具有互动性和娱乐性的桌面游戏。通过学习和实践这样的...

    AWT的例子 适合初学者

    AWT的例子 适合初学者 已经通过验证 正确可以运行

    Java AWT应用示例 - 持续更新

    Java AWT(Abstract Window Toolkit)是Java平台早期的图形用户界面(GUI)工具包,它提供了创建和管理窗口、按钮、文本框等组件的基本功能。本教程将深入探讨AWT库,通过实例来帮助理解其核心概念和用法。由于没有...

    java的awt计算器

    ### Java AWT 计算器知识点详解 #### 一、项目概述 本项目是一个使用Java AWT库构建的简易图形界面计算器。...对于初学者来说,这是一个很好的实践机会,能够帮助他们熟悉 Java GUI 开发的基本概念和技术。

    awt.rar_awt_java awt_java绘图

    这个"awt.rar"压缩包显然是一个关于Java AWT绘图的学习资源,适合初学者了解和实践AWT模块的绘图功能。 在Java中,AWT绘图是通过`Graphics`类来实现的,它是所有可绘制对象的基础。当你创建一个AWT组件,如`Canvas`...

    java awt应用控件

    Java AWT(Abstract Window Toolkit)是Java平台早期的图形用户界面(GUI)工具包,它提供了构建和控制GUI应用程序的基本组件。AWT组件是Java语言中的原始GUI元素,包括按钮、文本框、滚动条等。这些组件使得开发者...

    awt.rar_awt_java awt_java 画图

    因此,开发者可能会在这个资源中找到如何创建基本图形、处理鼠标和键盘事件以实现交互性,以及如何在Java AWT环境中实现动态画图的示例。 文件列表中的"awt"可能是包含AWT画图代码的Java源文件,而...

    java awt记事本

    Java AWT(Abstract Window Toolkit)是Java平台早期提供的图形用户界面(GUI)工具包,用于创建和管理窗口、按钮、文本框等组件。在“java awt记事本”项目中,开发者用AWT库构建了一个类似Windows XP记事本的应用...

    Java的AWT包.pdf

    首先,由于AWT是基于原生平台窗口系统的,所以它的性能可能不如后来的Swing包,后者是完全由Java实现的,提供了更好的性能和更丰富的组件集。其次,AWT的组件样式受限于底层操作系统,这意味着在不同平台上,同一...

    基于命令模式的Java AWT事件处理的改进设计与实现.pdf

    5. 命令模式在Java AWT事件处理中的应用:命令模式可以用于Java AWT事件处理,通过将事件源和事件监听器组合到命令模式的请求者中,从而实现事件处理的解耦和灵活性。 6. 内部类的应用:内部类可以用于处理Java AWT...

Global site tag (gtag.js) - Google Analytics