扩展 org.eclipse.ui.views 来创建 view
向导创建的ContactsView继承ViewPart抽象类,代码如下:
public ContactsView() {
}
@Override
public void createPartControl(Composite parent) {
//接口方法,用于创建View内容。
}
@Override
public void setFocus() {
//接口方法,View获得焦点时,由workbench调用。
}
将view添加到perspective
RCP程序都至少包含一个Perspective,IWorkbenchWindow包含一个Page,Page使用当前激活的Perspective来布局Views和Editors:
修改org.eclipsercp.hyperbola/Perspective.java
public void createInitialLayout(IPageLayout layout) {
layout.setEditorAreaVisible(false);
//将ContactsView放在默认Editor区域的左侧,所占区域比例为100%
//比例的范围是0.0f(只显示title bar)到1.0f(占用整个窗口)
layout.addView(ContactsView.ID, IPageLayout.LEFT,
1.0f, layout.getEditorArea());
}
其中ContactsView.ID是在ContactsView自定义的静态常量,定义了plugin.xml中ContactsView的id:
public static final String ID = "org.eclipsercp.hyperbola.views.contacts";
IPageLayout .addView方法添加的View显示一个标题栏,可以进行移动、关闭、最大化、最小化等操作。运行效果如下:
如果不想显示标题栏,可以使用IPageLayout .addStandaloneView。
layout.addStandaloneView(ContactsView.ID, false, IPageLayout.LEFT, 1.0f, layout.getEditorArea());
运行效果如下:
关于 perspective 的更多描述可参考:
http://hi.baidu.com/monkeyhoop/blog/item/e20273e6d2b4c828b8382038.html
打开同一个 view 的多个实例
设置 view 的 enableMultiple 属性为 true
<extension
point="org.eclipse.ui.views">
<view
allowMultiple="true"
class="org.eclipsercp.hyperbola.ContactsView"
icon="icons/groups.gif"
id="org.eclipsercp.hyperbola.views.contacts"
name="Contacts"/>
</extension>
修改 addView() 的 ID 属性为如下格式 primary-id:secondary-id ,并保证 secondary-id 在 perspective 中是唯一的:
org.eclipsercp.hyperbola/Perspective
public void createInitialLayout(IPageLayout layout) {
layout.addStandaloneView(ContactsView.ID + ":1", false,
IPageLayout.LEFT, 0.33f, layout.getEditorArea());
layout.addView(ContactsView.ID + ":2",
IPageLayout.BOTTOM, 0.70f, layout.getEditorArea());
layout.addView(ContactsView.ID + ":3",
IPageLayout.BOTTOM, 0.70f, layout.getEditorArea());
}
打开 view
org.eclipsercp.hyperbola/OpenViewAction
public class OpenViewAction extends Action {
private final IWorkbenchWindow window;
private int instanceNum;
private final String viewId;
public OpenViewAction(IWorkbenchWindow window, String viewId) {
this.window = window;
this.viewId = viewId;
}
public void run() {
try {
window.getActivePage().showView(viewId,
Integer.toString(instanceNum), IWorkbenchPage.VIEW_ACTIVATE);
instanceNum++;
} catch (PartInitException e) {
// handle exception
}
}
}
使用 Sticky View
这种 view 在多个 perspective 中保持相同的打开位置,与 editor 类似,其在同于 workbench window 中的多个不同 perspective 中是共享同一个实例的,perspective 切换时不会影响其显示。
org.eclipsercp.hyperbola/plugin.xml
<extension point="org.eclipse.ui.views">
<view
class="org.eclipsercp.hyperbola.ContactsView"
icon="icons/groups.gif"
id="org.eclipsercp.hyperbola.views.contacts"
name="Contacts"/>
<stickyView
closeable="false"
id="org.eclipsercp.hyperbola.ContactsView"
location="LEFT"
moveable="false"/>
</extension>
stickyView 只是创建了一个 placeholder,并不是创建实际的 view,它通过 id 来关联一个已存在的 view id。当此 view 打开时,其就变成 sticky view。
创建 Open View 列表菜单
org.eclipsercp.hyperbola/ApplicationActionBarAdvisor
protected void makeActions(IWorkbenchWindow window) {
views = ContributionItemFactory.VIEWS_SHORTLIST.create(window);
}
protected void fillMenuBar(IMenuManager menuBar) {
MenuManager viewsMenu = new MenuManager("Open View", "views");
viewsMenu.add(views);
menuBar.add(viewsMenu);
}
菜单默认显示当前 perspective 定义的 view 列表,这个列表的内容由 IPageLayout.addShowViewShortcut(String) 添加。
使用 Workbench 预定义 View
org.eclipse.ui.ExtensionFactory 类定义了很多 Workbench 预定义的 View、Page、Wizard。
<extension point="org.eclipse.ui.views">
<view
class="org.eclipse.ui.ExtensionFactory:progressView"
icon="icons/progress.gif"
id="org.eclipsercp.hyperbola.views.progress"
name="Progress"/>
</extension>
参考:
《Eclipse Rich Client Platform Designing, Coding, and Packaging Java Applications》:chapter5、chapter16、chapter17
引用自:
http://hi.baidu.com/monkeyhoop/blog/item/965d28251bbe0035c995596b.html
向导创建的ContactsView继承ViewPart抽象类,代码如下:
public ContactsView() {
}
@Override
public void createPartControl(Composite parent) {
//接口方法,用于创建View内容。
}
@Override
public void setFocus() {
//接口方法,View获得焦点时,由workbench调用。
}
将view添加到perspective
RCP程序都至少包含一个Perspective,IWorkbenchWindow包含一个Page,Page使用当前激活的Perspective来布局Views和Editors:
修改org.eclipsercp.hyperbola/Perspective.java
public void createInitialLayout(IPageLayout layout) {
layout.setEditorAreaVisible(false);
//将ContactsView放在默认Editor区域的左侧,所占区域比例为100%
//比例的范围是0.0f(只显示title bar)到1.0f(占用整个窗口)
layout.addView(ContactsView.ID, IPageLayout.LEFT,
1.0f, layout.getEditorArea());
}
其中ContactsView.ID是在ContactsView自定义的静态常量,定义了plugin.xml中ContactsView的id:
public static final String ID = "org.eclipsercp.hyperbola.views.contacts";
IPageLayout .addView方法添加的View显示一个标题栏,可以进行移动、关闭、最大化、最小化等操作。运行效果如下:
如果不想显示标题栏,可以使用IPageLayout .addStandaloneView。
layout.addStandaloneView(ContactsView.ID, false, IPageLayout.LEFT, 1.0f, layout.getEditorArea());
运行效果如下:
关于 perspective 的更多描述可参考:
http://hi.baidu.com/monkeyhoop/blog/item/e20273e6d2b4c828b8382038.html
打开同一个 view 的多个实例
设置 view 的 enableMultiple 属性为 true
<extension
point="org.eclipse.ui.views">
<view
allowMultiple="true"
class="org.eclipsercp.hyperbola.ContactsView"
icon="icons/groups.gif"
id="org.eclipsercp.hyperbola.views.contacts"
name="Contacts"/>
</extension>
修改 addView() 的 ID 属性为如下格式 primary-id:secondary-id ,并保证 secondary-id 在 perspective 中是唯一的:
org.eclipsercp.hyperbola/Perspective
public void createInitialLayout(IPageLayout layout) {
layout.addStandaloneView(ContactsView.ID + ":1", false,
IPageLayout.LEFT, 0.33f, layout.getEditorArea());
layout.addView(ContactsView.ID + ":2",
IPageLayout.BOTTOM, 0.70f, layout.getEditorArea());
layout.addView(ContactsView.ID + ":3",
IPageLayout.BOTTOM, 0.70f, layout.getEditorArea());
}
打开 view
org.eclipsercp.hyperbola/OpenViewAction
public class OpenViewAction extends Action {
private final IWorkbenchWindow window;
private int instanceNum;
private final String viewId;
public OpenViewAction(IWorkbenchWindow window, String viewId) {
this.window = window;
this.viewId = viewId;
}
public void run() {
try {
window.getActivePage().showView(viewId,
Integer.toString(instanceNum), IWorkbenchPage.VIEW_ACTIVATE);
instanceNum++;
} catch (PartInitException e) {
// handle exception
}
}
}
使用 Sticky View
这种 view 在多个 perspective 中保持相同的打开位置,与 editor 类似,其在同于 workbench window 中的多个不同 perspective 中是共享同一个实例的,perspective 切换时不会影响其显示。
org.eclipsercp.hyperbola/plugin.xml
<extension point="org.eclipse.ui.views">
<view
class="org.eclipsercp.hyperbola.ContactsView"
icon="icons/groups.gif"
id="org.eclipsercp.hyperbola.views.contacts"
name="Contacts"/>
<stickyView
closeable="false"
id="org.eclipsercp.hyperbola.ContactsView"
location="LEFT"
moveable="false"/>
</extension>
stickyView 只是创建了一个 placeholder,并不是创建实际的 view,它通过 id 来关联一个已存在的 view id。当此 view 打开时,其就变成 sticky view。
创建 Open View 列表菜单
org.eclipsercp.hyperbola/ApplicationActionBarAdvisor
protected void makeActions(IWorkbenchWindow window) {
views = ContributionItemFactory.VIEWS_SHORTLIST.create(window);
}
protected void fillMenuBar(IMenuManager menuBar) {
MenuManager viewsMenu = new MenuManager("Open View", "views");
viewsMenu.add(views);
menuBar.add(viewsMenu);
}
菜单默认显示当前 perspective 定义的 view 列表,这个列表的内容由 IPageLayout.addShowViewShortcut(String) 添加。
使用 Workbench 预定义 View
org.eclipse.ui.ExtensionFactory 类定义了很多 Workbench 预定义的 View、Page、Wizard。
<extension point="org.eclipse.ui.views">
<view
class="org.eclipse.ui.ExtensionFactory:progressView"
icon="icons/progress.gif"
id="org.eclipsercp.hyperbola.views.progress"
name="Progress"/>
</extension>
参考:
《Eclipse Rich Client Platform Designing, Coding, and Packaging Java Applications》:chapter5、chapter16、chapter17
引用自:
http://hi.baidu.com/monkeyhoop/blog/item/965d28251bbe0035c995596b.html