作业:顺序图片显示器

用java实现的顺序图片显示器,先说缺陷,图片无法自动缩放,同时图片无法居中显示,调了很久,调不出来。下面贴代码:

这个类用来获取目录下的图片,并将图片的地址放到List中。

public class GetImages {
  public static List<String> getImages(String path){
	  List<String> images = new ArrayList<String>();
	  File file = new File(path);
	  if(file.isFile()){
		  images.add(file.getPath());
		  return images;
	  }
	  File[] list = file.listFiles();
	  
	//取得可读取的图像文件的后缀名:jpg、 bmp、wbmp、jpeg、png、gif
	  String[] extensions = ImageIO.getReaderFileSuffixes();
	  for(File f:list){
		for(String str:extensions){
			//判断是否为图像文件
		 if(f.getName().substring(f.getName().indexOf(".")+1).equals(str)){
			 images.add(f.getPath());
		 }
		}
	  }
	  return images;
	  
  }
}
构造图形界面的类。

public class ShowImage extends JFrame{
   JPanel panel,temp1,temp2;
   JButton btn1,btn2;
   JLabel label;
   int i = 0;
   private static final int DEFAULT_WIDTH = 600;
   private static final int DEFAULT_HEIGHT = 400;
  
   public ShowImage(){
	   
   }
   public ShowImage(final List<String> images){
	   panel =  new JPanel();
	   btn1 = new JButton("上一张");
	   btn2 = new JButton("下一张");
	   
	   panel.add(btn1,BorderLayout.EAST);
	   panel.add(btn2,BorderLayout.WEST);
	   
	   label = new JLabel();
	   label.setIcon(new ImageIcon(images.get(i)));
	   label.setVerticalAlignment(SwingConstants.CENTER);
	   this.add(label,BorderLayout.CENTER);
	   this.add(panel,BorderLayout.SOUTH);
	   /*
	    * temp1,temp2用来占据位置使label不要贴近窗口,大小可随意设置
	    * 因为BorderLayout默认使控件拉伸到最大,如果布局左右两边没有控件,中间的控件会将两边的位置也占满
	    */
	   temp1 = new JPanel();
	   temp2 = new JPanel();
	   temp1.setSize(600, 400);
	   temp2.setSize(600, 400);
	   
	   this.add(temp1,BorderLayout.WEST);
	   this.add(temp2,BorderLayout.EAST);
	   btn1.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				//第一张时,设置为最后一张
				if(i==0){
					i = images.size()-1;
				}else{
					i--;
				}
				label.setIcon(new ImageIcon(images.get(i)));
				
			}
			   
		   });
		   btn2.addActionListener(new ActionListener(){

				@Override
				public void actionPerformed(ActionEvent e) {
					//最后一张时,设置为第一张
					if(i==images.size()-1){
						i = 0;
					}else{
						i++;
					}
					label.setIcon(new ImageIcon(images.get(i)));
				}
				   
			   });
		  
		   this.setTitle("图片浏览器");
		   this.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
		   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		   this.setVisible(true);
		  
   }
  
}
最后一个是运行类。

public class Test {

	public static void main(String[] args) {
      
          ShowImage s = new ShowImage(GetImages.getImages("E:\\picture\\加藤惠"));//改为自己的目录
	}

}
效果图:





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值