Sametime Java toolkit 中内置了一系列UI对象,使用这些UI对象可以极大的简化Sametime客户端软件的开发。这些UI组件也分为两类,一类是对话框和面板(Panel),一类称之为UI组件。
对话框和面板类UI对象包括:
- 添加用户对话框(AddDialog):显示添加用户对话框
- 解析用户面板(ResolvePanel):解析用户对话框
- 用户状态感知列表(AwarenessList):在列表中实时显示用户状态,并可以通过该列表发起对话。
- Place用户状态感知列表(PlaceAwarenessList):在列表中实时显示特定Place中的用户状态,并可以通过该列表发起对话。
- 目录面板(DirectoryPanel):显示并搜索特定目录中的用户或用户组
- 隐私设置面板(PrivacyPane1):设置用户隐私。
UI组件包括:
- 通知组件(AnnouncementUI):发送和接收通知
- 聊天组件(ChatUI):发送和接收即时消息
- 社区组件(CommunityUI):解析用户,显示注销和管理员消息
- 文件传输组件(FileTransferUI):发送和接收文件
注意在使用上述所有对象前,必须先将它们装入STSession对象。为了简化,我们可以使用下面的语句装入全部组件:
session.loadAllComponents();
这两种UI对象的区别是:对话框和面板和面板对象都需要通过构造器生成,即使用new关键字。而UI组件和服务层的对象类似,要使用STSession的getCompApi方法装入。
在所有UI对象中,最为复杂的是用户状态感知列表(AwarenessList)组件。使用它我们几乎可以完成一个简单Sametime客户端程序的全部功能。而其他大部分UI组件的功能在用户状态感知列表组件中都可以找到。因此我们将重点介绍用户状态感知列表组件,并给出一个只使用用户状态感知列表组件和添加用户对话框组件的示例程序STUIClient。该示例除没有会议功能外,其他功能与服务层介绍的示例程序STClient基本相同,但代码量只是该程序的四分之一。
下面是示例程序的界面:

图6:Sametime客户端UI示例程序:STUIClient
用户可以在列表中添加用户,并选择与在线用户交谈。同样为了便于读者理解,本文中的代码只是从程序中摘取的一些片断并做了少许修改,完整的代码可以在参考资料中下载。
对话框和面板
1.添加用户对话框(AddDialog)
我们可以通过如下方法弹出一个添加用户对话框:
步骤一:创建并打开对话框
AddDialog d = new AddDialog((Frame) parent, m_session, "Select Users"); d.setVisible(true);
步骤二:实现listener
首先在调用setVisible()方法前增加语句:
d.addResolveViewListener(new ResolveHandler());
注意AddDialog 的addResolveViewListener()方法要求使用ResolveViewListener接口。如果解析成功,该接口的resolved()方法将会被调用。在本例中,如果解析失败或解析到多个用户,我们不作任何处理。如果解析到多个用户,添加用户对话框会列出所有匹配的用户以供选择。
private class ResolveHandler implements ResolveViewListener { public void resolved(ResolveViewEvent event) { System.out.println("resolved"); } public void resolveFailed(ResolveViewEvent event) { System.out.println("resolved failed"); } }
2.解析用户面板(ResolvePanel)
由于添加用户对话框已经实现了解析用户面板的基本功能,我们在这里不再作详细介绍。有兴趣的读者可以自行参考客户端toolkit中的示例程序ResolveApplet。
3.用户状态感知列表(AwarenessList)
用户状态感知列表的用法如下:
步骤一:创建AwarenessList对象并将它添加到AWT容器中
AwarenessList awarenessList = new AwarenessList(m_session, AwarenessList.CHECKED_BORDER); add(awarenessList, BorderLayout.CENTER);
步骤二:添加用户
awarenessList.addUser(stUser)
AddUser()可以在任何需要添加用户时调用。在示例程序中,我们分别在loggedIn()方法中添加自己,和在resolved()中添加解析成功的用户。
我们不需要添加任何listener,用户状态感知列表就可实时监听并显示列表上任何用户状态的变化。
使用用户状态感知列表组件,我们还可以在任何在线用户上单击右键并选择交谈,发送通知或发送文件。
4.空间用户状态感知列表(PlaceAwarenessList)
虚拟空间用户状态感知列表组件与用户状态感知列表组件用法类似,此处不再赘述。有兴趣的读者可以自行参考客户端toolkit中的示例程序PlaceAwareness。
5. 目录面板(DirectoryPanel)
由于添加用户对话框已经实现了解析目录面板的基本功能,我们在这里不再作详细介绍。有兴趣的读者可以自行参考客户端toolkit中的示例程序Directory。
6. 隐私设置面板(PrivacyPane1)
限于篇幅我们不再详细介绍隐私设置面板,有兴趣的读者可以自行参考客户端toolkit中的示例程序PrivacyApplet。