일부 페이지가있는 Eclipse 용 작은 마법사를 작성 중이며 처음 페이지를 표시하는 순간을 알아야합니다.WizardPage의 처음 표시 방법을 잡는 방법
생성자와 createControl
을 검사했지만 Wizard
개체 (addPages
)의 생성 순간에 호출되었습니다.
내가 필요한 것을 얻을 수있는 방법이 있습니까? 누군가 트릭을 알고 있나?
일부 페이지가있는 Eclipse 용 작은 마법사를 작성 중이며 처음 페이지를 표시하는 순간을 알아야합니다.WizardPage의 처음 표시 방법을 잡는 방법
생성자와 createControl
을 검사했지만 Wizard
개체 (addPages
)의 생성 순간에 호출되었습니다.
내가 필요한 것을 얻을 수있는 방법이 있습니까? 누군가 트릭을 알고 있나?
WizardDialog에 등록 된 IPageChangedListener
또는 IpageChangingListener
을 사용할 수 있습니다. 마법사의 현재 페이지가 변경되면 알림이 전송됩니다.
WizardPage에서 setVisible (boolean) 메서드를 재정의 할 수 있습니다. 그래서 예를 들어 같은 것을 사용
private boolean initialized = false;
@Override
public void setVisible(boolean visible) {
if (!initialized && visible) {
//do something
initialized = true;
}
control.setVisible(visible);
}
고맙습니다. 다른 방법을 사용했습니다. – morbilli
확인을, 나는 페인트 이벤트에 대한 리스너를 작성 마법사 클래스에서 제어 플래그 m_isFirsTime
, 사용 :
public void createControl(Composite parent) {
Composite container = new Composite(parent, SWT.NONE);
setControl(container);
container.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent arg0) {
if (m_isFirstTime) {
m_isFirstTime = false;
StartXMLParsing();
}
}
});
...
}
그것은 나에 대한 확인이다.
먼저 그림을 그린 후에 청취자를 제거하는 것을 선호합니다. 그렇게하면 추가 부울 필드가 필요없고 불필요한 paintControl 호출을 피하고 매번 부울 값을 확인할 수 있습니다. 내가 사용하지 않는
container.addPaintListener(new PaintListener()
{
@Override
public void paintControl(PaintEvent e)
{
doUsefulStuff();
container.removePaintListener(this);
}
});
public void createControl(Composite parent) {
// create controls
getContainer().getShell().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
try {
getContainer().run(false, false, new IRunnableWithProgress() {
@Override
public void run(IProgressMonitor arg0) throws InvocationTargetException, InterruptedException {
// init and validate controls here
}
});
} catch (InvocationTargetException e) {
// handle e.getCause();
} catch (InterruptedException e) {
// nothing
}
}
});
}
는'WizardDialog', 나는'org.eclipse.jface.wizard.Wizard'와'org.eclipse.ui.INewWizard'를 사용합니다. 그리고이 경우'IPageChangedListener' 나'IpageChangingListener'를 어떻게 사용할 지 모르겠습니다. – morbilli
@ user433689'WizardDialog'를 얻기 위해'Wizard.getContainer()'를 사용하십시오. – Baldrick
좋아, 시도해 보겠습니다. – morbilli