Java 如何在按下后退按钮时清除jface向导中的字段

Java 如何在按下后退按钮时清除jface向导中的字段,java,swt,jface,wizard,Java,Swt,Jface,Wizard,我已经创建了一个JFace向导PCWizard扩展wizard,共有四页 PCPageOne,PCPageTwo,PCPageTwo和PCPageFour扩展WizardPage 当我到达最后一页时,我希望“后退”和“取消”按钮被禁用 当我在其他页面上按下后退按钮时,我希望页面小部件中的数据被清除,当我再次按下下一步时,我希望文本字段为空,这样下一步按钮就不会被激活 我还捕获了在另一个类中收集的数据,如果您希望我覆盖向导对话框类并执行该操作,我将如何执行该操作。我对java和SWT还不熟悉,可以

我已经创建了一个JFace向导
PCWizard
扩展
wizard
,共有四页
PCPageOne
PCPageTwo
PCPageTwo
PCPageFour
扩展
WizardPage

  • 当我到达最后一页时,我希望“后退”和“取消”按钮被禁用
  • 当我在其他页面上按下后退按钮时,我希望页面小部件中的数据被清除,当我再次按下下一步时,我希望文本字段为空,这样下一步按钮就不会被激活

  • 我还捕获了在另一个类中收集的数据,如果您希望我覆盖
    向导对话框
    类并执行该操作,我将如何执行该操作。我对java和SWT还不熟悉,可以进行更详细的解释。要禁用“后退”按钮,请在最后一页中执行以下操作:

    @Override
    public IWizardPage getPreviousPage() {
        // prevent going back
        return null;
    }
    
    也可以在
    IPageChangedListener
    中清除页面中的输入:

    WizardDialog dialog = new WizardDialog(Display.getCurrent().getActiveShell(), wizard);
    dialog.addPageChangedListener(new IPageChangedListener() {
        public void pageChanged(PageChangedEvent event) {
            // this is just a suggestion..
            IClearablePage page = (IClearablePage)event.getSelectedPage();
            page.clear();
        }
    });
    
    其中,
    iclerablepage
    是您自己的带有
    clear()
    的接口,您的所有页面都实现了
    iclerablepage


    编辑:如格雷格在回答中所述,覆盖
    setVisible
    可能更方便。

    要禁用后退按钮,请在最后一页执行以下操作:

    @Override
    public IWizardPage getPreviousPage() {
        // prevent going back
        return null;
    }
    
    也可以在
    IPageChangedListener
    中清除页面中的输入:

    WizardDialog dialog = new WizardDialog(Display.getCurrent().getActiveShell(), wizard);
    dialog.addPageChangedListener(new IPageChangedListener() {
        public void pageChanged(PageChangedEvent event) {
            // this is just a suggestion..
            IClearablePage page = (IClearablePage)event.getSelectedPage();
            page.clear();
        }
    });
    
    其中,
    iclerablepage
    是您自己的带有
    clear()
    的接口,您的所有页面都实现了
    iclerablepage


    编辑:覆盖
    setVisible
    ,正如格雷格在他的回答中所说的那样可能更方便。

    覆盖
    向导页面
    setVisible
    方法,以便在页面激活时清除字段:

    @Override
    public void setVisible(final boolean visible)
    {
      super.setVisible(visible);
    
      if (visible) {
        // TODO clear your fields
      }
    }
    

    覆盖
    向导页面
    设置可见
    方法,以便在页面处于活动状态时清除字段:

    @Override
    public void setVisible(final boolean visible)
    {
      super.setVisible(visible);
    
      if (visible) {
        // TODO clear your fields
      }
    }
    

    谢谢greg,这起作用了……,我还有一个疑问,当在向导的最后一个向导页面上按下一个链接/按钮,并且应该像一个正常的新打开的向导一样工作时,如何进入第一个页面…,我尝试通过保留一个选择侦听器来调用第一个页面,但其他页面没有启用下一个页面,你能看一下吗..谢谢greg,这很有效..我还有一个疑问,当在向导的最后一页上按了一个链接/按钮,并且应该像一个正常的新打开的向导一样工作时,如何进入第一页。。。,我试着通过保留一个选择侦听器来调用第一个页面,但是其他页面没有启用下一个页面,您能查看一下吗。。