Using SWT ScrolledComposite with Eclipse JFace WizardPage



我想在eclipse插件中添加scrolledomposite。在我实现卷轴材料的第一页上,一切正常。问题是,在此之后要显示的第二页是空白的。

第一页的初始化代码:

    public void createControl(Composite parent) {
        ScrolledComposite scroll = new ScrolledComposite(parent,  SWT.NULL | SWT.V_SCROLL); 
        scroll.setLayoutData(new GridData(GridData.FILL_VERTICAL)); 
        scroll.setAlwaysShowScrollBars(false);   
        scroll.setExpandVertical(true); 
        scroll.setExpandHorizontal(true); 
        scroll.setMinHeight(500);  
        scroll.setLayout(new GridLayout(1, false)); 
        Composite container = new Composite(scroll, SWT.NULL);      
        GridLayout layout = new GridLayout();
        container.setLayout(layout); 
        scroll.setContent(container); 

    setControl(container);
    setPageComplete(false);
}

第二页createControl代码是标准的,但是我也尝试找到父母,这将是卷轴 - 我认为这将是"嵌套" scrolledComposite的问题 - 像这样:

    ScrolledComposite scroll = null;
 if(parent.getChildren() != null && parent.getChildren().length > 1 && parent.getChildren()[1] instanceof ScrolledComposite) { 
  scroll = (ScrolledComposite)parent.getChildren()[1]; 
 } 
    scroll.setLayoutData(new GridData(GridData.FILL_VERTICAL)); 
    Composite container = new Composite(scroll, SWT.NULL); 
    scroll.setContent(container);
    scroll.setAlwaysShowScrollBars(false);   
    scroll.setExpandVertical(true); 
    scroll.setExpandHorizontal(true); 
    scroll.setMinHeight(500);  
    scroll.setLayout(new GridLayout(1, false)); 

    GridLayout layout = new GridLayout();
    container.setLayout(layout); 
    container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

但是这种方法不起作用。

有没有人有一些与卷轴插曲和多页Jface向导集成的经验?

我找到了解决方案,但是 - 我必须承认 - 这是非常愚蠢的错误。将setControl(container);更改为setControl(scroll);是足够的。现在每个页面都正确显示。请以后照顾这些事情:)

如果您看到类层次结构didialogpage-> dialogogPage-> wizardpage-> yourcustompage。因此,对于每个页面,您都需要在父综合综合下创建自定义内容,该内容由向导在WizardPages共享。

但是,您正在此根复合材料的顶部添加ScollableComposite,这是您的情况下的内容元素,特定于第一页,不应在第二个向导页面上共享。

因此,您需要为第二页创建一个新的ScollableComposite,并分别添加您的内容。如果您尝试在第二页中更新同一scollableComposite的内容,则在单击"返回"按钮时,您的内容不会更新为第一页。因为getPreviousPage()被调用时不会调用createContent()。

最新更新