如何獲取當前eclipse項目的名稱?我在GMF視圖中,並且在使用彈出菜單的某個子菜單時需要項目名稱。如何在eclipse中獲取項目名稱?
14
A
回答
25
這GMF class有一個直截了當的回答,如果你有機會到ResourcesPlugin名稱:
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(myBundleName);
通用答案(從potentially outdated code)也能像(如果你有一個編輯器中打開):
IEditorPart editorPart =
getSite().getWorkbenchWindow().getActivePage().getActiveEditor();
if(editorPart != null)
{
IFileEditorInput input = (IFileEditorInput)editorPart.getEditorInput() ;
IFile file = input.getFile();
IProject activeProject = file.getProject();
String activeProjectName = activeProject.getName();
//... use activeProjectName
}
如果沒有打開編輯器:
IViewPart [] parts =
MyPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().getViews();
IProject activeProject = null;
for(int i=0;i<parts.length;i++)
{
if(parts[i] instanceof ResourceNavigator)
{
ResourceNavigator navigator = (ResourceNavigator)parts[i];
StructuredSelection sel =
(StructuredSelection)navigator.getTreeViewer().getSelection();
IResource resource = (IResource)sel.getFirstElement();
activeProject = resource.getProject();
break;
}
}
String activeProjectName = activeProject .getName();
7
使用選擇服務將爲您提供當前選定的對象,然後可以檢查選擇類型並根據選擇獲取項目。
如果創建ISelectionListener並將其註冊爲ISelectionService上的偵聽器,則只要活動選擇更改,就會通知您,並且會給出對選擇部分和擁有部分的引用。
ISelectionListener listener = new ISelectionListener() {
public void selectionChanged(IWorkbenchPart sourcePart, ISelection selection) {
setSourcePart(sourcePart);
setSelection(selection);
}
};
...
//register the listener
selectionService.addSelectionListener(listener);
...
//either get the selection service and get the selection, or use the stored version from the listener
ISelectionService selectionService =
Workbench.getInstance().getActiveWorkbenchWindow().getSelectionService();
ISelection selection = selectionService.getSelection();
if(selection instanceof IStructuredSelection) {
Object element = ((IStructuredSelection)selection).getFirstElement();
IProject project;
if (element instanceof IResource) {
project= ((IResource)element).getProject();
} else if (element instanceof PackageFragmentRootContainer) {
IJavaProject jProject =
((PackageFragmentRootContainer)element).getJavaProject();
project = jProject.getProject();
} else if (element instanceof IJavaElement) {
IJavaProject jProject= ((IJavaElement)element).getJavaProject();
project = jProject.getProject();
}
} else if (selection instanceof ITextSelection) {
if(sourcePart instanceof JavaEditor) {
IJavaElement element = SelectionConverter.resolveEnclosingElement(sourcePart, selection);
project = element.getJavaProject().getProject();
}
}
查看此article on the Eclipse selection service瞭解更多詳情。
+0
大概比我的答案要準確得多。 +1 – VonC 2009-07-30 12:28:01
2
Rich Seller和VonC都提供了很好的答案,但他們似乎不夠完整/使用內部類。我已經提出了以下內容。
@Override
public void createPartControl(Composite parent)
{
....
// Register to be notified about selections
getSite().getWorkbenchWindow().getSelectionService()
.addPostSelectionListener(this);
// Detect the current selection
detectCurrentSelection();
}
@Override
public void selectionChanged(IWorkbenchPart part, ISelection selection)
{
IProject project = convertSelection(part, selection);
setProject(project);
}
private void detectCurrentSelection()
{
IProject project = null;
IWorkbenchWindow window = getSite().getWorkbenchWindow();
IWorkbenchPage activePage = window.getActivePage();
if (activePage != null)
{
IEditorPart part = activePage.getActiveEditor();
if (part != null)
{
project = convertSelection(part);
}
else
{
IViewReference[] viewReferences = activePage.getViewReferences();
for (IViewReference viewRef : viewReferences)
{
IViewPart view = viewRef.getView(false);
ISelection selection = null;
if (view instanceof IPackagesViewPart)
{
IPackagesViewPart viewPart = (IPackagesViewPart) view;
TreeViewer treeViewer = viewPart.getTreeViewer();
selection = treeViewer.getSelection();
}
else if (view instanceof CommonNavigator)
{
CommonNavigator navigator = (CommonNavigator) view;
CommonViewer commonViewer = navigator.getCommonViewer();
selection = commonViewer.getSelection();
}
if (selection instanceof IStructuredSelection)
{
IStructuredSelection structuredSelection = (IStructuredSelection) selection;
project = convertSelection(structuredSelection);
if (project != null)
break;
}
}
}
}
setProject(project);
}
private IProject convertSelection(IWorkbenchPart part, ISelection selection)
{
IProject project = null;
if (selection instanceof IStructuredSelection)
{
IStructuredSelection structuredSelection = (IStructuredSelection) selection;
project = convertSelection(structuredSelection);
}
else if (selection instanceof ITextSelection)
{
if (part instanceof IEditorPart)
{
IEditorPart editorPart = (IEditorPart) part;
IResource resource = (IResource)editorPart.getEditorInput().getAdapter(IResource.class);
if (resource != null)
{
project = resource.getProject();
}
}
}
return project;
}
private IProject convertSelection(IEditorPart part)
{
IProject project = null;
IResource resource = (IResource)part.getEditorInput().getAdapter(IResource.class);
if (resource != null)
{
project = resource.getProject();
}
return project;
}
private IProject convertSelection(IStructuredSelection structuredSelection)
{
IProject project = null;
Object element = structuredSelection.getFirstElement();
if (element instanceof IResource)
{
project = ((IResource) element).getProject();
}
else if (element instanceof IJavaElement)
{
IJavaElement javaElement = (IJavaElement) element;
project = javaElement.getJavaProject().getProject();
}
else if (element instanceof IAdaptable)
{
IAdaptable adaptable = (IAdaptable) element;
IWorkbenchAdapter adapter = (IWorkbenchAdapter) adaptable.getAdapter(IWorkbenchAdapter.class);
if (adapter != null)
{
Object parent = adapter.getParent(adaptable);
if (parent instanceof IJavaProject)
{
IJavaProject javaProject = (IJavaProject) parent;
project = javaProject.getProject();
}
}
}
return project;
}
5
我從上面的帖子創建了一個很好的功能,並添加了一些更新。適用於當前的日食。
public static IProject getCurrentSelectedProject() {
IProject project = null;
ISelectionService selectionService =
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService();
ISelection selection = selectionService.getSelection();
if(selection instanceof IStructuredSelection) {
Object element = ((IStructuredSelection)selection).getFirstElement();
if (element instanceof IResource) {
project= ((IResource)element).getProject();
} else if (element instanceof PackageFragmentRoot) {
IJavaProject jProject =
((PackageFragmentRoot)element).getJavaProject();
project = jProject.getProject();
} else if (element instanceof IJavaElement) {
IJavaProject jProject= ((IJavaElement)element).getJavaProject();
project = jProject.getProject();
}
}
return project;
}
相關問題
- 1. 如何在Eclipse Indigo中獲取項目名稱?
- 2. 如何按名稱獲取QListWidget項目?
- 3. 獲取項目名稱
- 4. TFS獲取項目名稱
- 5. 獲取項目名稱
- 6. 獲取StringArray項目名稱
- 7. 獲取WPF項目的項目名稱
- 8. 如何更改Eclipse-Android項目名稱?
- 9. 在Eclipse中更新項目名稱
- 10. 覆蓋eclipse項目名稱?
- 11. Eclipse Web項目名稱
- 12. Eclipse項目名稱驗證
- 13. Eclipse - Android項目名稱
- 14. 如何在docker-compose.yml中設置/獲取項目名稱
- 15. 如何在.NET中獲取父項目的程序集名稱?
- 16. 如何在c#中獲取propertygrid項目名稱,標籤和值?
- 17. 如何使用Assembly.GetExecutingAssembly()。GetName()獲取項目名稱空間名稱。名稱
- 18. Eclipse:將項目名稱作爲VM參數獲取?
- 19. 如何在Eclipse中更改Android項目的包名稱?
- 20. Eclipse中Android項目名稱的錯誤
- 21. 如何獲取MSBuild項目文件中的文件夾名稱?
- 22. 如何獲取wikicode中的Wikidata項目的名稱?
- 23. 如何獲取jquery中下拉選定項目的名稱?
- 24. 如何從列表中獲取特定項目的名稱
- 25. 如何獲取python中某個名稱鍵的項目值?
- 26. scrapy如何從scrapy項目中獲得項目名稱
- 27. XAML如何獲得項目名稱
- 28. 在jquery中獲取項目的目錄名稱
- 29. 在MVC中獲取項目根目錄名稱5
- 30. 獲取點擊項目的名稱
對於GMF改變爲myplugin部分:。。 `IViewPart []份= {yourPluginName} DiagramEditorPlugin.getInstance()getWorkbench()getActiveWorkbenchWindow()getActivePage()getViews();` 您的GMF插件名稱可以在您的.genmodel中找到。 – Ring 2013-02-25 09:13:31