图片浏览器 -- 学习笔记(一)
功能要求:
实现一个简单的图片浏览器,界面上有菜单栏和工具栏,主要支持打开、放大图片、缩小图片、查看上一张、下一张图片。
学到的知识点有:
Java 的反射机制、内部类、单态模式、命令模式
需要解决的技术问题有:
--如何使对话框实现文件过滤功能?
--如何实现打开文件的对话框?
--如何消除大量的 if...else 语句?
--如何实现打开图片?
--如何放大或者缩小图片?
--如何实现浏览“上一张”或“下一张”图片?
解决好上面的几个问题后,这个简单的图片浏览器就基本完成了。
这一部分主要解决前两个问题:
如何使对话框实现文件过滤功能?
如何实现打开文件的对话框?
这两个问题要放在一起分析,在用户单击“打开”按钮或“打开”菜单项时,主窗口应该弹出一个文件对话框,如下图所示:
在文件类型的下拉框中显示了用户可选择的文件过滤器列表,选择列表中的不同过滤器,红色区域中所显示的文件也不同,这就是过滤器的作用。图片浏览器显示的一般都是图片文件,所以这里需要程序员自己定义一系列专用的图片过滤器,专门过滤图片文件。
查过JDK API后发现可以使用java.swing.JFileChooser实现文件对话框,同时JFileChooser还提供了方法addChoosableFileFilter(FileFilter filter) 向用户可选择的文件过滤器列表添加过滤器。
再查看类FileFilter,发现它是一个抽象类,JFileChooser使用它过滤显示给用户的文件集合。
以上明确了可以使用什么类来实现文件对话框和文件过滤器,下面定义两个类:
一个文件对话框类(ViewFileChooser)来继承java.swing.JFileChooser
一个文件过滤器类(MyFileFiler)来继承javax.swing.filechooser.FileFilter
文件过滤器类(MyFileFiler)作为文件对话框类(ViewFileChooser)的一个内部类。
这里使用内部类好处简单解释下:
如果一个类A只对某个类B提供作用,那么可以把A定义为B的一个内部类。内部类能够被隐藏起来,不被同一个包中的其他类访问。
在文件过滤器类(MyFileFiler)中实现了两个重要的方法:
boolean accept(File f),用于判断文件是否属于图片类型
String getDescription(),用于获取过滤器的描述
这里判断一个文件是否属于图片类型的方法很简单,就是判断文件的后缀名。
以上就是 过滤 文件和打开文件的 实现 方法。
第二部分 来看看如何消除大量的 if...else 语句。