Eclipse rcp 确定视图的哪个实例当前在RCP中处于活动状态?
我正在创建一个RCP应用程序。我需要打开同一视图的多个实例,但数据不同。我是通过为同一视图的不同实例设置辅助id来实现的。具体来说,我的问题如下:请看一看 我有一个名为Eclipse rcp 确定视图的哪个实例当前在RCP中处于活动状态?,eclipse-rcp,rcp,Eclipse Rcp,Rcp,我正在创建一个RCP应用程序。我需要打开同一视图的多个实例,但数据不同。我是通过为同一视图的不同实例设置辅助id来实现的。具体来说,我的问题如下:请看一看 我有一个名为Views.GraphView的图形视图。我通过一个名为openGraphView的命令打开了它的不同实例,以显示不同的图形。命令如下: page.showView("Views.GraphView", Integer.toString(instanceNum++), IWorkbenchPage.VIEW_ACTIVATE);
Views.GraphView
的图形视图。我通过一个名为openGraphView
的命令打开了它的不同实例,以显示不同的图形。命令如下:
page.showView("Views.GraphView", Integer.toString(instanceNum++), IWorkbenchPage.VIEW_ACTIVATE);
现在,我在这个Views.GraphView
工具栏上有一个名为TreeLayout
的命令,它假设要更改图形的布局,并将对视图的每个实例进行操作。但对于这个,我认为,我需要确定视图的哪个实例是活动的。TreeLayout
命令如下所示:
IViewPart findView = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage(). findView( "Views.GraphView"); //I think in the findView I need to give the id of the view [but how can I put the secondary id?]
GraphView view = (GraphView) findView;
view.changeLayout(); //I wrote this method in the graph view to change the layout
//I just tried to print the secondary id, but it did not print anyting
System.out.println("From treelayout command:- " + view.getViewSite().getSecondaryId());
因此,如何识别视图的哪个实例当前处于活动状态并对其进行操作?如果返回null,则可以使用当前透视图中不存在具有viewId和viewId的视图
如果您有ViewReference,则可以使用它来获取视图
因此,在你的处理程序中,你会得到如下结果:
final IWorkbenchPage page = HandlerUtil.getActiveWorkbenchWindow(
event).getActivePage();
final int instanceNum = 8;//the number of instances that are created
for (int index = 0; index < instanceNum; index++) {
final IViewReference viewReference = page.findViewReference(
"Views.GraphView", Integer.toString(index));
if (viewReference != null) {
final IViewPart view = viewReference.getView(true);
if (view instanceof GraphView) {
final GraphView graphView = (GraphView) view;
graphView.changeLayout();
}
}
}
final IWorkbenchPage=HandlerUtil.getActiveWorkbenchWindow(
getActivePage();
最终int instanceNum=8//创建的实例数
对于(int index=0;index
如果返回null,则可以使用viewId和viewId的视图在当前透视图中不存在
如果您有ViewReference,则可以使用它来获取视图
因此,在你的处理程序中,你会得到如下结果:
final IWorkbenchPage page = HandlerUtil.getActiveWorkbenchWindow(
event).getActivePage();
final int instanceNum = 8;//the number of instances that are created
for (int index = 0; index < instanceNum; index++) {
final IViewReference viewReference = page.findViewReference(
"Views.GraphView", Integer.toString(index));
if (viewReference != null) {
final IViewPart view = viewReference.getView(true);
if (view instanceof GraphView) {
final GraphView graphView = (GraphView) view;
graphView.changeLayout();
}
}
}
final IWorkbenchPage=HandlerUtil.getActiveWorkbenchWindow(
getActivePage();
最终int instanceNum=8//创建的实例数
对于(int index=0;index
view.getViewSite().getSecondaryId()方法是识别次视图的好方法。此方法仅返回“主”视图的空字符串:当用户单击“窗口->显示视图-您的视图”时打开的视图
我不明白为什么视图工具栏按钮必须在所有视图实例上操作。在我看来,每个视图实例工具栏中应该有一个按钮,仅在其自己的视图中操作。如果您真的需要从一个按钮操作所有视图,我认为您必须自己保留打开的视图引用,因为我认为工作台没有提供返回视图数组的findViews方法。view.getViewSite().getSecondaryId()方法是识别次视图的好方法。此方法仅返回“主”视图的空字符串:当用户单击“窗口->显示视图-您的视图”时打开的视图
我不明白为什么视图工具栏按钮必须在所有视图实例上操作。在我看来,每个视图实例工具栏中应该有一个按钮,仅在其自己的视图中操作。如果您真的需要从一个按钮操作到所有视图,我认为您必须自己保留打开的视图引用,因为我认为工作台没有提供返回视图数组的FindView方法。使用下面的代码,您应该能够获得当前的活动视图
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart()
使用以下代码,您应该能够获得当前活动视图
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart()
活动视图和编辑器名称显示在MessageDialogbox上
我希望这个答案是有用的
活动视图和编辑器名称显示在MessageDialogbox上
我希望这个答案有用。嗨,非常感谢你的回复。我尝试了你的代码,但不幸的是它没有工作。如果打开图形视图的两个或多个实例,则该命令仅适用于最后一个实例,而不适用于前一个实例。你能提供更多的信息吗。谢谢,Syeed我的第一个想法是page.findViewReference只返回活动viewpart的viewreference。你能调试以确认这一点吗?嗨,我调试代码。page.findViewReference返回对当前打开的所有视图实例的引用(无论当前选择了哪个视图实例)。但该引用仅适用于视图的最后一个实例(在我的示例中,changeLayout()适用于最后一个实例)。此外,如果关闭视图的最后一个实例,它仍然无法用于以前的视图实例。请提供一些解决方案-SyeedHi,非常感谢您的回复。我尝试了你的代码,但不幸的是它没有工作。如果打开图形视图的两个或多个实例,则该命令仅适用于最后一个实例,而不适用于前一个实例。你能提供更多的信息吗。谢谢,Syeed我的第一个想法是page.findViewReference只返回活动viewpart的viewreference。你能调试以确认这一点吗?嗨,我调试代码。page.findViewReference返回对当前打开的所有视图实例的引用(无论当前选择了哪个视图实例)。但该引用仅适用于视图的最后一个实例(在我的示例中,changeLayout()适用于最后一个实例)。此外,如果关闭视图的最后一个实例,它仍然无法用于以前的视图实例。请提供一些