글쎄, "새로운 패키지"를 고려하는 것은 실제로 클래스입니다 : NewPackageWizardPage
(source code)를 사용
org.eclipse.jdt.internal.ui.wizards.NewPackageCreationWizard
, 당신은 볼 수 있습니다 :
public void init(IStructuredSelection selection) {
IJavaElement jelem = getInitialJavaElement(selection);
initContainerPage(jelem);
String pName = ""; //$NON-NLS-1$
if (jelem != null) {
IPackageFragment pf = (IPackageFragment) jelem
.getAncestor(IJavaElement.PACKAGE_FRAGMENT);
if (pf != null && !pf.isDefaultPackage())
pName = pf.getElementName();
}
setPackageText(pName, true);
updateStatus(new IStatus[] { fContainerStatus, fPackageStatus });
}
을 getInitialJavaElement() being part of superclass NewContainerWizardPage
으로 :
/**
* Utility method to inspect a selection to find a Java element.
*
* @param selection the selection to be inspected
* @return a Java element to be used as the initial selection, or <code>null</code>,
* if no Java element exists in the given selection
*/
protected IJavaElement getInitialJavaElement(
IStructuredSelection selection) {
IJavaElement jelem = null;
if (selection != null && !selection.isEmpty()) {
Object selectedElement = selection.getFirstElement();
if (selectedElement instanceof IAdaptable) {
IAdaptable adaptable = (IAdaptable) selectedElement;
jelem = (IJavaElement) adaptable
.getAdapter(IJavaElement.class);
if (jelem == null) {
IResource resource = (IResource) adaptable
.getAdapter(IResource.class);
if (resource != null
&& resource.getType() != IResource.ROOT) {
while (jelem == null
&& resource.getType() != IResource.PROJECT) {
resource = resource.getParent();
jelem = (IJavaElement) resource
.getAdapter(IJavaElement.class);
}
if (jelem == null) {
jelem = JavaCore.create(resource); // java project
}
}
}
}
}
if (jelem == null) {
IWorkbenchPart part = JavaPlugin.getActivePage()
.getActivePart();
if (part instanceof ContentOutline) {
part = JavaPlugin.getActivePage().getActiveEditor();
}
if (part instanceof IViewPartInputProvider) {
Object elem = ((IViewPartInputProvider) part)
.getViewPartInput();
if (elem instanceof IJavaElement) {
jelem = (IJavaElement) elem;
}
}
}
if (jelem == null
|| jelem.getElementType() == IJavaElement.JAVA_MODEL) {
try {
IJavaProject[] projects = JavaCore.create(
getWorkspaceRoot()).getJavaProjects();
if (projects.length == 1) {
jelem = projects[0];
}
} catch (JavaModelException e) {
JavaPlugin.log(e);
}
}
return jelem;
}
이 두 가지 방법 중 하나를 사용하여 사용자 정의 UI를 초기화 할 수 있어야합니다. 원하는 정보 (예 : '상대 소스 경로').
는 DirectoryFieldEditor
의 소스를 보면, 당신은 주요 텍스트 필드가 StringFieldEditor
에 정의 된 경우이 값을 기준으로 그 디렉토리 선택 대화 상자를 엽니 표시됩니다 doLoad() :
String JavaDoc value = getPreferenceStore().getString(getPreferenceName());
textField.setText(value);
을 그 사용자 정의 UI에서 기본 설정 저장소를 가져오고 올바른 경로를 ID와 연관시켜야 함을 의미합니다. 해당 ID를 DirectoryFieldEditor
초기화에 사용합니다. Yucan은 an example here을 참조하십시오.
public static final String MY_PATH = "my.init.path";
IPreferenceStore store = myPlugin.getDefault().getPreferenceStore();
store.setValue(MY_PATH, theRightPath);
myDirFieldEditor = new DirectoryFieldEditor(MY_PATH, "&My path", getFieldEditorParent());
당신이 코멘트에 언급 된 바와 같이,이 모든에만 일식 부분 GUI가 아닌 DirectoryDialog
에 의해 시작 네이티브 Windows 탐색기 초기화됩니다
이 (네이티브 인터페이스)를 기반으로 :
는 GUI 필터 경로에 따라 루트 경로를 초기화 그건, 그래서 당신은 또한이 윈도우 GUI SHBrowseForFolder
에 의해 픽업 얻기 위해 경로로 (일식 측에) 해당 필터 필드를 초기화해야합니다.
DirectoryFieldEditor에 따르면 getTextControl() (위에서 초기화 한 필드)이 대상입니다.
그러나 문제는 필드가 상대 경로로 초기화되었다는 사실에서 기인합니다.이 경로는 기본 OS에서 알 수 없으므로 기본값은 루트 OS 경로로 다시 설정됩니다.
상대 경로가 아닌 프로젝트의 전체 시스템 경로를 저장하는 방법을 찾아야합니다.
그런 식으로 전체 경로는 Os에서 인식하고 초기 경로로 사용됩니다.
예를 들어 IJavaElement
에서 관련 리소스를 가져 와서 전체 시스템 경로를 가져올 수 있습니다.
실제로 IPackageFragment
에서 getPath()
으로 전화를 걸어 IPath
에 전체 시스템 경로가 포함되어 있는지 확인해야합니다.
요청에 따라 DirectoryFieldEditor 초기화 팁을 추가했습니다. – VonC
텍스트 필드를 상대 경로가 아닌 프로젝트의 전체 시스템 경로로 초기화해야합니다. 나는 내 대답을 업데이트했습니다 – VonC