购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.5 照片管理功能设计

1.5.1 照片管理功能概述

照片的管理包括添加、修改、删除照片内容和照片信息,还可以根据照片标题、拍摄时间和照片描述进行搜索。同时照片管理的功能还可以批量增加和删除照片,让使用者管理起照片来更加方便、简单。

1.5.2 照片管理功能技术分析

使用数码照片时,有时需要把相册中的照片提取出来用于其他用途,于是创建了saveButtonActionPerformed()方法,在这个方法中处理如何把数码照片从相册中提取出来,语法如下:

figure_0032_0033

evt:动作事件的接口。

在提取照片时,单击工具栏中的“保存”按钮就可以实现。方法 saveButtonAction Performed()负责处理保存按钮的动作事件,在该方法中首先判断是否存在被选中的照片;然后弹出文件选择框,并获得选择的文件夹;最后保存照片到选择的文件夹。下面是该方法的部分代码:

figure_0032_0034

在保存照片到选择的文件夹之前,需要判断用来保存选中照片向量中的最后一个对象,是否和向量中的第一个对象或倒数第二个对象重复,具体的判断代码如下:

figure_0032_0035

figure_0033_0037 可能出现照片重复的原因是,如果是在按下“Shift”键的情况下通过单击鼠标按键选取的,会将最后一次单击的照片单独插入向量的最后,目的是确保向量中的最后一个照片是最后一次单击的照片。

下面就可以将选中的照片保存到选择的文件夹中了,此时对照片文件的命名,主要是以照片在相册中的标题命名的,这样照片文件的名称会更具有辨别意义,具体代码如下:

figure_0033_0038

1.5.3 照片管理功能实现过程

照片管理功能包括添加、修改、删除和查找照片,下面分别介绍各个功能的实现过程。

1.添加照片

在添加照片时,既可以选择指定的照片进行逐一添加,如图1.7所示;又可以选择指定的文件夹进行批量添加,如图1.8所示。

当单击“添加照片”按钮时,将执行 addPhotoButtonActionPerformed()方法,如果是批量添加,将在新创建的线程中完成,该方法的完整代码如下:

figure_0033_0039
figure_0034_0040
figure_0034_0041

图1.8 选择照片,逐一添加

figure_0034_0042

图1.9 选择文件夹,批量添加

figure_0034_0043 如果是批量添加,一定要过滤文件夹中的文件,因为在文件夹中可能存在文件夹和文件格式不符合条件的文件。

在方法addPhotoButtonActionPerformed()中调用了addPhoto()方法,该方法负责将图片信息保存到数据库中,以及将图片添加到图片箱面板中,完整代码如下:

figure_0034_0044
figure_0035_0045

在方法addPhoto()中首先调用了upLoadPhoto()方法,该方法负责将图片上传到指定路径,并将图片按上传的具体时间命名,目的是避免出现图片重名的情况,在上传之前还要判断上传的路径是否存在,如果不存在则需要创建上传路径,该方法的完整代码如下:

figure_0035_0046

在方法 upLoadPhoto()中调用了 getPhotoName()方法,该方法负责获得图片上传后的名称,图片名称由上传的具体时间组成,并且需要精确到毫秒,否则仍然可能出现图片重名的情况,该方法的完整代码如下:

figure_0035_0047

figure_0035_0048 因为符号“:”不能用来定义文件名,所以这里将其替换为了“-”。

2.修改照片

在修改照片时,选中要修改的照片后单击工具栏中的“修改”按钮,将打开如图1.17所示的“修改信息”对话框,并显示照片当前的信息。

方法 updPhotoButtonActionPerformed()负责处理修改照片信息按钮的动作事件,首先要判断是否有且仅有一个照片被选中,只有满足这个条件才弹出用来修改照片信息的对话框,否则将弹出相应的信息提示框,该方法的完整代码如下:

figure_0036_0049

图1.10 修改照片信息

figure_0036_0050

照片标题最长只能为20个字节,即10个中文汉字或20个英文字符,通过捕获文本框的键盘事件,可以控制文本框可输入字符的最大长度,具体的实现代码如下:

figure_0036_0051

照片标题还不允许为空,或者全部由空格组成,当为空或者全部由空格组成时,“确定”按钮将变为不可用,这一功能是通过为标题文本框添加CaretListener事件监听器实现的,具体代码如下:

figure_0036_0052

方法 titleTextFieldCaretUpdate()负责处理标题文本框的 CaretListener 事件,该方法的完整代码如下:

figure_0036_0053

修改照片信息结束后单击“确定”按钮,将执行submitButtonActionPerformed()方法,执行具体的修改操作,具体代码如下:

figure_0037_0054
3.删除照片

选中所有要删除的照片后单击工具栏中的删除照片按钮,可以删除所有被选中的照片,在执行删除之前先弹出一个确认删除的提示框,避免因为用户的误操作而删除照片。方法 delPhotoButtonActionPerformed()负责处理删除照片按钮的动作事件,该方法的完整代码如下:

figure_0037_0055

figure_0037_0056 在删除照片时,需要从3个位置进行删除,分别为系统窗体、数据库和照片文件。

4.查找照片

单击工具栏中的查找照片按钮,将打开如图 1.11 所示的对话框,输入查询条件后可以查找满足指定条件的照片。

figure_0038_0057

图1.11 查找满足指定条件的照片

如果存在被选中的相册,将在选中的相册及其子相册中查找,否则将在所有相册中查找,符合查询条件的照片将显示在照片显示区,效果如图1.12所示。

figure_0038_0058

图1.12 查找结果

单击照片可以查看其所属的相册。例如单击标题为“吉林省九台市”的照片,相册“AAA / aaa”将被选中,效果如图1.13所示;单击标题为“吉林九台”的照片,相册“BBB / bbb”将被选中,效果如图1.14所示。

figure_0038_0059

图1.13 查看照片“吉林省九台市”所属的相册

方法findPhotoButtonActionPerformed()负责处理工具栏中查找照片按钮的动作事件,该方法的完整代码如下:

figure_0038_0060
figure_0039_0061

图1.14 查看照片“吉林九台”所属的相册

输入查询条件后单击“确定”按钮,将执行 submitButtonActionPerformed()方法。在该方法中首先获得查询条件,并判断用户是否输入了查询条件,要求至少输入一个查询条件,负责该部分业务逻辑的具体代码如下:

figure_0039_0062

然后是组织查询条件并执行查询,如果拍摄日期选择的查询条件是一段时间,要求终止日期不能小于起始日期,负责该部分业务逻辑的具体代码如下:

figure_0039_0063
figure_0040_0064

最后是创建一个线程,在该线程中将符合查询条件的照片加载到当前的浏览方式面板中,负责该部分业务逻辑的具体代码如下:

figure_0040_0065
figure_0041_0066

当单击查询得到的照片时,该照片所属的相册将被选中,这个功能是在按钮的鼠标事件监听器中完成的,负责该部分业务逻辑的具体代码如下:

figure_0041_0067

figure_0041_0068 当相册树足够大时,可能有部分相册节点不可见,通过JTree类的scrollPathToVisible(TreePath path)方法,可以使路径path中的叶子节点滚动至可见。 ft9aHPV+u1EhI0wcGBajqq4cfUj59Qn1uqsejnsnYvV/JUBTAXTbsuXW+WwP8f8q

点击中间区域
呼出菜单
上一章
目录
下一章
×