Eclipse 是一个通用工具平台。它是一个开放的、可用于任何东西的可扩展 IDE,它为工具开发人员提供了灵活性以及对软件技术的控制能力。Eclipse 为开发人员提供了生产大量 GUI 驱动的工具和应用程序的基础。而这项功能的基础就是基于GUI库 的SWT 和 JFace。
SWT(Standard Widget Toolkit)本身仅仅是Eclipse组织为了开发Eclipse IDE环境所编写的一组底层图形界面 API。至今为止,SWT无论在性能上还是外观上,都超越了Sun公司提供的AWT和Swing。
SWT/JFace是Eclispe的基础,Eclipse的Workbench就是建立在SWT/JFace之上的。
RCP(Rich Client Platform)富客户端平台是基于Eclipse插件开发的一种应用。它是Eclipse 3.0版本后新增的一项功能。通过RCP可以快速构建应用程序,具有广阔的应用前景。
[b]一、概念[/b]
[b](1)SWT(Standard Widget Toolkit):[/b]
Eclipse中的窗口小部件工具箱,它是一组窗口组件的实现,并能底层操作系统图形用户界面平台紧密集成。另外,SWT定义了所有受支持平台上的公共可移植API,并尽可能地使用本机窗口小部件在每个平台上实现该API,这允许SWT在所有平台上维护一致的编程模型,且能立即反映底层操作系统图形用户界面外观中的任何更改。
SWT提供了一套API,它因为Eclipse而生,但它完全可以脱离Eclipse而存在。
[b](2)JFace:[/b]
在 SWT 库顶部提供常见的应用程序用户界面功能。JFace并不试图“隐藏”SWT 或者替换它的功能。它提供一些类和接口,用来处理SWT对动态用户界面相关联的常见任务。JFace是在SWT之上开发的,它和SWT形成一个交集,其中SWT提供最原始的组件。
JFace对SWT进行了扩展,把用户熟悉的一些组件进行了封装,在开发中用户可以尽可能地用JFace组件来开发自己的应用。JFace程序和SWT程序类似,只不过JFace把常用的功能进行了提炼,使用户不必太关心SWT的一些细节。
[b](3)RCP(Rich Client Platform):[/b]
本质上是Eclipse的插件,所以当开发RCP应用程序时,可以利用Eclipse平台UI外观和框架来快速地进行开发。例如创建一个菜单栏、工具栏。
当程序员开发桌面的应用时,往往想摆脱对Eclipse IDE的依赖,而是希望使用最小的运行环境来运行系统。所以在Eclipse 3.0以后的版本中逐步地将插件的运行从Eclipse的运行平台中剥离出来,从而形成了RCP。脱离Eclipse平台独立运行,这样大大减少了打包程序后文件的体积,使系统更加小巧和雅观。
[b]二、SWT特性及组件[/b]
[b](1)特性[/b]
SWT是一个套库函数,它创建了Java 版的本地操作系统 GUI 控件。它依赖于本机实现,这意味着基于SWT的应用程序具有以下几个关键特性:
<1>它们的外观、行为和执行类似于“本机”应用程序。
<2>所提供的窗口小部件(Widget)反映了主机操作系统上提供的窗口小部件(组件和控件)。
<3>主机 GUI 库的任何特殊行为都在 SWT GUI 中得到反映。
SWT 不同于 Java 技术的 Swing,Swing 的设计目标是消除操作系统的差异。SWT 库反映了主机操作系统的基本窗口小部件,JFace 库有助于向 SWT 应用程序中添加大量服务,SWT 最重要的扩展之一是将应用程序的数据模型与显示及更改它的 GUI 隔离开来。
[b](2)SWT中的基本组件[/b]
<1>Widget:基本的 SWT GUI 组件(类似于 Java AWT 中的 Component 和 Swing 中的 JComponent),Widget 是一个抽象类。
<2>Control:拥有操作系统的对等物的窗口小部件,Control 是一个抽象类。
<3>Composite:包含其他控件的控件(类似于 Java AWT 中的 Container 和 Swing 中的JPanel)。
<4>Item:其他控件包含的窗口小部件(该控件可能是复合控件),如列表和表。Item 是一个抽象类。
这些窗口组件(或小部件)被安排在继承层次结构中。其中Widget是底层的类。
为了避免命名冲突,定制控件的名称都是以“C”开始的(例如,比较 CLabel 与 Label)。
提示:创建一个组件通常有两个参数,第一个为父组件,第二个是组件的显示样式,例如:“Button button = new Button(shell, SWT.RADIO);”。
[b]三、使用SWT Designer作为开发工具[/b]
SWT Designer 是一种功能强大且容易使用的基于Eclipse SWT技术的图形用户界面设计工具,是一个很好的Eclipse的界面开发插件包。利用SWT Designer 的可视化界面,只需采用拖拉操作,就可以很快地在窗体上创建各种组件,设计出来的窗体和组件的外观和操作系统平台下其他软件的外观相似,具有本机系统的风格。
(1)下载
[url=http://www.instantiations.com/windowbuilder/swtdesigner/download.html?id=2]http://www.instantiations.com/windowbuilder/swtdesigner/download.html?id=2[/url]
(2)文档
[url=http://download.instantiations.com/D2WBDoc/continuous/latest/docs/html/index.html]http://download.instantiations.com/D2WBDoc/continuous/latest/docs/html/index.html[/url]
[b]四、创建系统托盘[/b]
SWT(Standard Widget Toolkit)本身仅仅是Eclipse组织为了开发Eclipse IDE环境所编写的一组底层图形界面 API。至今为止,SWT无论在性能上还是外观上,都超越了Sun公司提供的AWT和Swing。
SWT/JFace是Eclispe的基础,Eclipse的Workbench就是建立在SWT/JFace之上的。
RCP(Rich Client Platform)富客户端平台是基于Eclipse插件开发的一种应用。它是Eclipse 3.0版本后新增的一项功能。通过RCP可以快速构建应用程序,具有广阔的应用前景。
[b]一、概念[/b]
[b](1)SWT(Standard Widget Toolkit):[/b]
Eclipse中的窗口小部件工具箱,它是一组窗口组件的实现,并能底层操作系统图形用户界面平台紧密集成。另外,SWT定义了所有受支持平台上的公共可移植API,并尽可能地使用本机窗口小部件在每个平台上实现该API,这允许SWT在所有平台上维护一致的编程模型,且能立即反映底层操作系统图形用户界面外观中的任何更改。
SWT提供了一套API,它因为Eclipse而生,但它完全可以脱离Eclipse而存在。
[b](2)JFace:[/b]
在 SWT 库顶部提供常见的应用程序用户界面功能。JFace并不试图“隐藏”SWT 或者替换它的功能。它提供一些类和接口,用来处理SWT对动态用户界面相关联的常见任务。JFace是在SWT之上开发的,它和SWT形成一个交集,其中SWT提供最原始的组件。
JFace对SWT进行了扩展,把用户熟悉的一些组件进行了封装,在开发中用户可以尽可能地用JFace组件来开发自己的应用。JFace程序和SWT程序类似,只不过JFace把常用的功能进行了提炼,使用户不必太关心SWT的一些细节。
[b](3)RCP(Rich Client Platform):[/b]
本质上是Eclipse的插件,所以当开发RCP应用程序时,可以利用Eclipse平台UI外观和框架来快速地进行开发。例如创建一个菜单栏、工具栏。
当程序员开发桌面的应用时,往往想摆脱对Eclipse IDE的依赖,而是希望使用最小的运行环境来运行系统。所以在Eclipse 3.0以后的版本中逐步地将插件的运行从Eclipse的运行平台中剥离出来,从而形成了RCP。脱离Eclipse平台独立运行,这样大大减少了打包程序后文件的体积,使系统更加小巧和雅观。
[b]二、SWT特性及组件[/b]
[b](1)特性[/b]
SWT是一个套库函数,它创建了Java 版的本地操作系统 GUI 控件。它依赖于本机实现,这意味着基于SWT的应用程序具有以下几个关键特性:
<1>它们的外观、行为和执行类似于“本机”应用程序。
<2>所提供的窗口小部件(Widget)反映了主机操作系统上提供的窗口小部件(组件和控件)。
<3>主机 GUI 库的任何特殊行为都在 SWT GUI 中得到反映。
SWT 不同于 Java 技术的 Swing,Swing 的设计目标是消除操作系统的差异。SWT 库反映了主机操作系统的基本窗口小部件,JFace 库有助于向 SWT 应用程序中添加大量服务,SWT 最重要的扩展之一是将应用程序的数据模型与显示及更改它的 GUI 隔离开来。
[b](2)SWT中的基本组件[/b]
<1>Widget:基本的 SWT GUI 组件(类似于 Java AWT 中的 Component 和 Swing 中的 JComponent),Widget 是一个抽象类。
<2>Control:拥有操作系统的对等物的窗口小部件,Control 是一个抽象类。
<3>Composite:包含其他控件的控件(类似于 Java AWT 中的 Container 和 Swing 中的JPanel)。
<4>Item:其他控件包含的窗口小部件(该控件可能是复合控件),如列表和表。Item 是一个抽象类。
这些窗口组件(或小部件)被安排在继承层次结构中。其中Widget是底层的类。
为了避免命名冲突,定制控件的名称都是以“C”开始的(例如,比较 CLabel 与 Label)。
提示:创建一个组件通常有两个参数,第一个为父组件,第二个是组件的显示样式,例如:“Button button = new Button(shell, SWT.RADIO);”。
[b]三、使用SWT Designer作为开发工具[/b]
SWT Designer 是一种功能强大且容易使用的基于Eclipse SWT技术的图形用户界面设计工具,是一个很好的Eclipse的界面开发插件包。利用SWT Designer 的可视化界面,只需采用拖拉操作,就可以很快地在窗体上创建各种组件,设计出来的窗体和组件的外观和操作系统平台下其他软件的外观相似,具有本机系统的风格。
(1)下载
[url=http://www.instantiations.com/windowbuilder/swtdesigner/download.html?id=2]http://www.instantiations.com/windowbuilder/swtdesigner/download.html?id=2[/url]
(2)文档
[url=http://download.instantiations.com/D2WBDoc/continuous/latest/docs/html/index.html]http://download.instantiations.com/D2WBDoc/continuous/latest/docs/html/index.html[/url]
[b]四、创建系统托盘[/b]
/**
* 创建托盘
* @param shell
*/
private static void createSysTray(Shell shell){
final int hWnd = shell.handle;
OS.SetWindowLong(hWnd, OS.GWL_EXSTYLE, OS.WS_EX_CAPTIONOKBTN);
final Tray tray = Display.getCurrent().getSystemTray();
if(tray == null){
return;
}else{
Display display = Display.getCurrent();
final Menu trayMenu = createTrayMenu(display, shell);
final TrayItem item = new TrayItem(tray, SWT.NONE);
item.setToolTipText("MyEditor");
item.setImage(SWTResourceManager.getImage(MyEditor.class,
"/app.ico"));
Listener listener = new Listener() {
public void handleEvent(Event event) {
if (event.type == SWT.Show){
System.out.println("显示");
}else if (event.type == SWT.Hide){
System.out.println("隐藏");
}else if (event.type == SWT.Selection){
System.out.println("选中");
Shell s = event.display.getShells()[0];
s.setVisible(true);
s.setMinimized(false);
}else if (event.type == SWT.DefaultSelection){
System.out.println("默认选中");
Shell s = event.display.getShells()[0];
s.setVisible(true);
s.setMinimized(false);
}else if (event.type == SWT.MenuDetect){
trayMenu.setVisible(true);
}
}
};
item.addListener(SWT.Show, listener);
item.addListener(SWT.Hide, listener);
item.addListener(SWT.Selection, listener);
item.addListener(SWT.DefaultSelection, listener);
item.addListener(SWT.MenuDetect, listener);
shell.addShellListener(new ShellListener() {
public void shellDeactivated(ShellEvent e) {
}
public void shellActivated(ShellEvent e) {
}
public void shellClosed(ShellEvent e) {
}
public void shellDeiconified(ShellEvent e) {
}
public void shellIconified(ShellEvent e) {
((Shell) e.getSource()).setVisible(false);
}
});
}
}
/**
* 创建托盘菜单
* @param display
* @param shell
* @return
*/
private static Menu createTrayMenu(final Display display, final Shell shell) {
Image image = SWTResourceManager.getImage(MyEditor.class,
"/app.ico");
final Menu trayMenu = new Menu(shell, SWT.POP_UP);
MenuItem welcomeItem = new MenuItem(trayMenu, SWT.PUSH);
welcomeItem.setText("欢迎");
welcomeItem.setImage(image);
new MenuItem(trayMenu, SWT.SEPARATOR);
MenuItem updatetem = new MenuItem(trayMenu, SWT.PUSH);
updatetem.setText("在线更新");
MenuItem aboutItem = new MenuItem(trayMenu, SWT.PUSH);
aboutItem.setText("关于我们");
aboutItem.setImage(image);
MenuItem exitItem = new MenuItem(trayMenu, SWT.PUSH);
exitItem.setText("退出");
exitItem.addSelectionListener(new SelectionListener(){
@Override
public void widgetDefaultSelected(SelectionEvent e) {
shell.close();
}
@Override
public void widgetSelected(SelectionEvent e) {
shell.close();
}
});
trayMenu.setDefaultItem(welcomeItem);
return trayMenu;
}