相册树功能包括添加新相册、修改和删除现有相册,如果当前选中一个相册然后再添加相册,则新添加的相册被添加到选中相册的子相册中;如果当前没有选中任何相册,则新添加的相册被添加到最顶级一层的相册中。
数码照片管理软件中的相册是以树的方式维护的,在操作相册树时有两个技术要点,下面进行详细介绍。
如果要查看某一相册中的照片,就要选中该相册树的节点,节点被选中后将其直接包含的照片加载到显示区域,下面是为相册树添加捕获选中节点事件监听器的完整代码:
当选中树节点和取消选中树节点的选中状态时,将发出 TreeSelectionEvent 事件,当捕获TreeSelectionEvent事件时,valueChanged(TreeSelectionEvent evt)方法将被触发执行,方法albumTreeValueChanged()负责处理相册树的选中节点事件,首先清空幻灯片标签和图片箱,然后获得选中节点的路径,最后加载该路径下的所有照片到显示区域,该方法的完整代码如下:
在加载照片的线程中刷新面板时,不要直接刷新包含照片的面板,那样将无法刷新滚动条。
在系统刚刚启动时,只加载了顶级相册,并没有加载整个相册树到系统中,用户第一次展开相册节点时,才加载该节点包含的子节点,这样就需要捕获相册节点被展开的事件,下面是为相册树添加捕获展开节点事件监听器的完整代码:
如果此次事件是由展开节点发出的,方法treeExpanded ()将被触发;如果此次事件是由折叠节点发出的,方法 treeCollapsed()将被触发。这里只关注节点被展开的事件,方法albumTreeTreeExpanded()负责处理相册树的展开节点事件,首先获得被展开节点的对象,然后查看该节点的子节点是否已经被加载,如果尚未加载则加载它的子节点,并刷新树模型,该方法的完整代码如下:
相册树的实现过程包括添加相册、修改相册和删除相册的实现,下面分别进行介绍。
(1)当单击添加相册按钮时,将执行 addAlbumButtonActionPerformed()方法,在该方法中主要通过获取当前的节点来判断是添加顶级相册还是添加子相册。如果添加顶级相册则可以直接保存相册名称,如果添加子相册要先获取当前相册的节点路径,然后再添加相册节点,代码如下:
当树的结构或节点信息发生改变时,需要执行reload()方法重新加载树模型,否则修改将不会同步到树中,该方法有两个重载方法,其中一个重载方法没有任何入口参数,用来重新加载整个树模型,另一个重载方法有一个TreeNode类型的入口参数,为要重新加载的树节点。
(2)当单击“修改相册”按钮时,将执行 updAlbumButtonActionPerformed()方法,该方法获取当前被选中的相册节点,然后获取新的相册名称再进行修改,最后刷新界面上的树,代码如下:
类DefaultMutableTreeNode中的方法setUserObject(ObjectuserObject)用来修改树节点的用户标签。
(3)当单击“删除相册”按钮时,将执行delAlbumButtonActionPerformed()方法,该方法获取当前相册节点,在删除之前提示用户是否确认删除该相册,用户同意后进行删除操作然后更新相册树,代码如下:
类DefaultMutableTreeNode中的方法remove(MutableTreeNodeaChild)用来从当前节点中移除指定的子节点。
(4)在添加和修改相册时,都需要用户输入相册名称,对相册名称有两个要求,一个是不允许仅包含空格,另一个是在相册中不允许有同名子相册,用来获得相册名称的getA lbumName()方法的完整代码如下: