當從導航視圖或jdt的package explorer視圖選中一個元素,可以對其進行開啟編輯器、開啟視圖、執行右鍵菜單中的action等等操作,這時在編寫相應的編輯器、視圖或action外掛程式時,可能會需要擷取到當前所選擇的元素及其所在的工程對象。本文以執行action為例說明擷取方法。
1.為action對象(實現IObjectActionDelegate)增加IStructuredSelection的私人屬性selection,並實現selectionChanged方法如下:
public void selectionChanged(IAction action, ISelection selection) {
this.selection = (IStructuredSelection)selection;
processSelection();
}
2.實現processSelection()方法,從selection對象中擷取所選擇的元素,並從中擷取工程對象,如下:
private void processSelection(){
Iterator it = selection.iterator();
if (it.hasNext()) {
Object next = it.next();
if (next instanceof Resource) {
proj = ((Resource) next).getProject();
} else if (next instanceof IJavaElement) {//若是一個IJavaElement對象,則先擷取JavaProject對象。
proj = ((IJavaElement) next).getJavaProject().getProject();
}
}
3.擷取IJavaProject()對象的方法。
若所選擇的元素是一個IJavaElement對象,則可以直接擷取到IJavaProject對象。
若所選擇的元素只是一個Resource,則可先擷取IProject對象,然後再調用:
IJavaProject javaPro = JavaCore.create(proj);
擷取IJavaProject對象。