Java 使用向导和ScrolledForm(jface和FormsAPI)

Java 使用向导和ScrolledForm(jface和FormsAPI),java,eclipse,swt,eclipse-rcp,jface,Java,Eclipse,Swt,Eclipse Rcp,Jface,我是eclipse插件SWT开发的新手。我正在尝试创建一个包含大量文本字段和组合框的向导页面。为了获得更好的外观和感觉,我正在尝试使用FormToolkit创建组件,并将它们添加到scrolled表单中。但在运行时,向导页面上不会呈现任何内容,也不会出现错误。 问题: 是否可以在向导页面中滚动容器 我们可以混合使用JFace和forms api吗? (删除不需要的代码) 以下是向导页面代码: 公共类ContactWizardPage扩展了WizardPage{ 专用静态整数计数器; 私人形式 p

我是eclipse插件SWT开发的新手。我正在尝试创建一个包含大量文本字段和组合框的向导页面。为了获得更好的外观和感觉,我正在尝试使用
FormToolkit
创建组件,并将它们添加到
scrolled表单中。但在运行时,向导页面上不会呈现任何内容,也不会出现错误。
问题:

  • 是否可以在向导页面中滚动容器
  • 我们可以混合使用JFace和forms api吗? (删除不需要的代码) 以下是向导页面代码:

    公共类ContactWizardPage扩展了WizardPage{ 专用静态整数计数器; 私人形式

    public ContactWizardPage() {        
        super("New Contact Wizard" + ++counter, "New Contact Wizard" + counter, null);
        setMessage("Please enter contact info." + counter);
    }
    
    public void createControl(final Composite parent) {
        createControlWithoutToolkit(parent);
        // commenting out toolkit code
    
    //createControlWithToolkit(父级); }

    }

  • 以下是向导代码:

    public class SampleNewWizard extends Wizard implements INewWizard {
    
    public SampleNewWizard() {
        super();
        setNeedsProgressMonitor(true);
    
    }
    
    @Override
    public IWizardPage getNextPage(IWizardPage page) {
        return super.getNextPage(page); 
    }   
    
    public void addPages() {    
        addPage(new ContactWizardPage());
        addPage(new ContactWizardPage());
        addPage(new ContactWizardPage());
        addPage(new ContactWizardPage());               
    }
    
    public boolean performFinish() {
        return true;
    }
    
    
    public void init(IWorkbench workbench, IStructuredSelection selection) {
    
    }
    
    }

    使用此代码,向导的第一页显示良好,但第二页从未正确呈现:( 以下是截图: 第一页:

    第二页: 这条线

    parent.getShell().setSize(240, 320);                    
    

    正在打乱某些东西(这不是您应该在向导页面中执行的操作,因为
    向导
    类处理大小调整)。在这里进行测试,如果没有它,它可以正常工作(我理解您的问题)。

    确保在向导打开时不处理FormToolKit。绘制事件需要在createControl()之后使用toolkit已经完成了

    我的解决方案是在向导中创建和处置FormToolKit:

    @Override
    public void createPageControls(Composite pageContainer) {       
        toolkit = new FormToolkit(pageContainer.getDisplay());
    
        super.createPageControls(pageContainer);
    }
    
    @Override
    public void dispose() {     
        super.dispose();
    
        if (toolkit != null) {
            try { toolkit.dispose(); } catch (Exception e) {}
        }
    }
    
    public FormToolkit getToolkit() {
        return toolkit;
    }
    
    在向导页面中,您可以使用((FormWizard)getWizard).getToolkit()获取对向导的表单工具包的引用

    @Override
    public void createControl(Composite parent) {
    
        FormToolkit toolkit = ((FormWizard) getWizard()).getToolkit();
    
        ...
    

    希望这有助于…

    我在Eclipse代码的向导页面中看到了
    FormToolkit
    的几种用法。
    FormToolkit
    只是在内部使用jface,所以混合使用它们应该不会有问题。如果您添加一些代码,我们可能会看到错误。感谢您立即回复greg。这是我在其中一个向导中试用的代码教程还不走运:(即使删除了“parent.getShell().setSize(240320);”行,它仍然无法正确显示第二页。但是如果我不使用FormToolkit并使用new创建组件,那么它可能与从new wizard运行有关,我使用的是
    WizardDialog
    @Override
    public void createControl(Composite parent) {
    
        FormToolkit toolkit = ((FormWizard) getWizard()).getToolkit();
    
        ...