【问题标题】:Using SWT ScrolledComposite with Eclipse JFace WizardPage将 SWT ScrolledComposite 与 Eclipse JFace WizardPage 一起使用
【发布时间】:2018-05-11 22:47:37
【问题描述】:

我想在 Eclipse 插件的向导页面中添加 scrolledComposite。在我实现 scrolledComposite 的 FirstPage 上一切正常。问题是,之后显示的 SecondPage 是空白的。

FirstPage 的初始化代码:

    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);
}

SecondPage 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));

但这种方法行不通。

有人在集成 ScrolledComposites 和多页 JFace 向导方面有经验吗?

【问题讨论】:

  • 对第二页使用与第一页相同的代码应该可以工作。

标签: java eclipse swt jface wizard


【解决方案1】:

如果您看到类层次结构 IDialogPage --> DialogPage --> WizardPage --> YourCustomPage。因此,对于每个页面,您需要在父组合下创建自定义内容,该组合由向导在 WizardPages 之间共享。

但是您要在此根组合之上添加 ScollableComposite,在您的情况下,它是内容元素,特定于第一页,不应与第二个向导页面共享。

因此您需要为第二个页面创建一个新的 ScollableComposite 并单独添加您的内容。如果您尝试在第二页更新同一个 ScollableComposite 的内容,那么当您单击后退按钮时,您的内容将不会更新到第一页。因为调用 getPreviousPage() 时不会调用 createContent()。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-04-01
      • 2020-03-05
      • 1970-01-01
      • 2010-12-03
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      相关资源
      最近更新 更多