在前几天尝试了一下将 extjs的gwt封装即gxt的desktop与Smartgwt绑定在一起,
效果还不错,不过有几个问题:
- 引入两个gwt的扩展,相互之间的js/css可能会有冲突
- 如果在项目中使用,会增加学习成本。
- 在gxt里面添加smartgwt的控件,有可能会出现问题。
- gxt 的 desktop 扩展起来麻烦。我的需求是要增加一个搜索框,就比较难实现。
- 换肤的话,要同时换两套,会比较麻烦,而且风格不一致
基于这些原因,我还是想自己搞一套desktop。
其实也简单,模仿gxt的desktop,搞出这么几个类:Desktop, Shortcut, TaskBar
其中还曾经试图模仿mac os的fisheye效果,做出了一个dock,不过发现很丑,就放弃了。
还是走了老路子,感觉还凑合。
使用的方式也差不多,创建一个Desktop实例,就会自动添加到RootPanel上去了。
public void onModuleLoad() {
initDebugConsole();
initErrorHandler();
desktop = new Desktop();
createMenuAndShortcut(desktop.getTaskBar());
}
private void createMenuAndShortcut(TaskBar taskBar) {
DesktopWindow contactWindow = new ContactPersonSubPanel();
DesktopWindow documentWindow = new DocumentManagePanel();
DesktopWindow notesWindow = new NotesSubPanel();
DesktopWindow calendarWindow = new CalendarManagePanel();
ToolStrip quickBar = taskBar.getQuickStartBar();
createMenuAndShortcut(contactWindow, quickBar);
createMenuAndShortcut(documentWindow, quickBar);
createMenuAndShortcut(notesWindow, quickBar);
createMenuAndShortcut(calendarWindow, quickBar);
quickBar.addSeparator();
DynamicForm form = createSimpleForm();
form.setAlign( Alignment.CENTER);
form.setLayoutAlign( VerticalAlignment.CENTER);
form.setFields(createSearchItem(), createStyleSelectItem());
quickBar.addMember( form);
quickBar.addSeparator();
createSystemButtons(quickBar);
quickBar.addSeparator();
}
之所以有一个DesktopWindow,是为了增加一些window状态管理的控制,区别不大。
和gxt的desktop的区别在于,没有做StartMenu,感觉我的应用没有那么多入口,
只有几个快捷方式,然后在taskbar 上增加了一些系统配置的按钮,以及搜索框和
换肤选择框。效果如下图所示:
![](http://dl.iteye.com/upload/attachment/378158/4f1269dc-4deb-3022-bd10-4a617142d9fc.jpg)
源码见附件,不保证能用,不提供技术支持。