很早很早就听说RCP了。也很想来玩玩,但是一直没有找到好的点子来练手。不过近段时间有个老朋友要求帮他做个小东西。他现在的需求很简单。我怕他以后有要加什么内容。所以就想用RCP来做。刚好用他来好好学习一下,要不都不好意思在bbs.rcp.cn混了。
找了本书(《Eclipse Rich Client Platform Designing Coding and Packaging Java Applications》)按照书中的例子看了起来。
了解基本的:
AbstractUIPlugin,
WorkbenchWindowAdvisor,
WorkbenchAdvisor,
ActionBarAdvisor,
IperspectiveFactory和ViewPart几个类。
收获最大的就是看到yipsilon在bbs.rcp.cn中关于布局的帖子。
http://www.eclipseworld.org/bbs/read.php?tid=1312&page=e#a
public
class
MGRPerspective
implements
IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {
Plugin plugin = Plugin.getDefault();
LSEmployee employee = plugin.getEmployee();
// 只有在用户登陆后才能画界面
if (employee != null ) {
String editorArea = layout.getEditorArea();
layout.setEditorAreaVisible( false );
// 主要界面
IFolderLayout main = layout.createFolder( " main " , IPageLayout.TOP, 0.95f , editorArea);
// 属性界面
IFolderLayout property = layout.createFolder( " property " , IPageLayout.RIGHT, 0.75f , " main " );
// 字典界面
IFolderLayout dictionary = layout.createFolder( " dictionary " , IPageLayout.BOTTOM, 0.95f , " property " );
LSPosition position = employee.getPosition();
boolean isManager = position.getManager().booleanValue();
if (isManager) {
main.addView(EmployeeTableView. class .getName());
property.addView(PositionPropertyView. class .getName());
property.addView(EmployeePropertyView. class .getName());
}
if (position.getBuyer().booleanValue() || isManager) {
main.addView(ProviderTableView. class .getName());
main.addView(JHInvoiceTableView. class .getName());
property.addView(ProviderPropertyView. class .getName());
property.addView(JHInvoicePropertyView. class .getName());
}
if (position.getKeeper().booleanValue() || isManager) {
dictionary.addView(DDRepositoryView. class .getName());
main.addView(DBInvoiceTableView. class .getName());
property.addView(DBInvoicePropertyView. class .getName());
}
if (position.getSeller().booleanValue() || isManager) {
main.addView(MemberTableView. class .getName());
main.addView(YDInvoiceTableView. class .getName());
main.addView(XSInvoiceTableView. class .getName());
property.addView(MemberPropertyView. class .getName());
property.addView(YDInvoicePropertyView. class .getName());
property.addView(XSInvoicePropertyView. class .getName());
}
if (position.getMaintainer().booleanValue() || isManager) {
dictionary.addView(DDAreaView. class .getName());
dictionary.addView(DDBrandView. class .getName());
dictionary.addView(DDColorView. class .getName());
dictionary.addView(DDCompView. class .getName());
dictionary.addView(DDLevelView. class .getName());
dictionary.addView(DDSizeView. class .getName());
dictionary.addView(DDSortView. class .getName());
dictionary.addView(DDDescriptionView. class .getName());
}
}
}
}
public void createInitialLayout(IPageLayout layout) {
Plugin plugin = Plugin.getDefault();
LSEmployee employee = plugin.getEmployee();
// 只有在用户登陆后才能画界面
if (employee != null ) {
String editorArea = layout.getEditorArea();
layout.setEditorAreaVisible( false );
// 主要界面
IFolderLayout main = layout.createFolder( " main " , IPageLayout.TOP, 0.95f , editorArea);
// 属性界面
IFolderLayout property = layout.createFolder( " property " , IPageLayout.RIGHT, 0.75f , " main " );
// 字典界面
IFolderLayout dictionary = layout.createFolder( " dictionary " , IPageLayout.BOTTOM, 0.95f , " property " );
LSPosition position = employee.getPosition();
boolean isManager = position.getManager().booleanValue();
if (isManager) {
main.addView(EmployeeTableView. class .getName());
property.addView(PositionPropertyView. class .getName());
property.addView(EmployeePropertyView. class .getName());
}
if (position.getBuyer().booleanValue() || isManager) {
main.addView(ProviderTableView. class .getName());
main.addView(JHInvoiceTableView. class .getName());
property.addView(ProviderPropertyView. class .getName());
property.addView(JHInvoicePropertyView. class .getName());
}
if (position.getKeeper().booleanValue() || isManager) {
dictionary.addView(DDRepositoryView. class .getName());
main.addView(DBInvoiceTableView. class .getName());
property.addView(DBInvoicePropertyView. class .getName());
}
if (position.getSeller().booleanValue() || isManager) {
main.addView(MemberTableView. class .getName());
main.addView(YDInvoiceTableView. class .getName());
main.addView(XSInvoiceTableView. class .getName());
property.addView(MemberPropertyView. class .getName());
property.addView(YDInvoicePropertyView. class .getName());
property.addView(XSInvoicePropertyView. class .getName());
}
if (position.getMaintainer().booleanValue() || isManager) {
dictionary.addView(DDAreaView. class .getName());
dictionary.addView(DDBrandView. class .getName());
dictionary.addView(DDColorView. class .getName());
dictionary.addView(DDCompView. class .getName());
dictionary.addView(DDLevelView. class .getName());
dictionary.addView(DDSizeView. class .getName());
dictionary.addView(DDSortView. class .getName());
dictionary.addView(DDDescriptionView. class .getName());
}
}
}
}
根据这段代码做出如下界面:
![rcp ui.bmp](http://www.blogjava.net/images/blogjava_net/jetgeng/rcp/rcp%20ui.bmp)
很简单。大家见笑了。呵呵。
我的代码就不贴了。看yipsilon的代码就可以搞定布局了。再次感谢yipsilon。