我想将scrolledComposite添加到Eclipse插件中的向导页面。在我实现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向导集成的经验?
答案 0 :(得分:0)
如果您看到类层次结构IDialogPage - > DialogPage - > WizardPage - > YourCustomPage。因此,对于每个页面,您需要在父组件下创建自定义内容,该组件由向导在WizardPages中共享。
但是您要在此根复合体之上添加ScollableComposite,这是您的案例中的内容元素,特定于第一页并且不应该共享到第二个向导页面。
因此,您需要为第二页创建一个新的ScollableComposite并单独添加您的内容。如果您尝试在第二页中更新相同ScollableComposite的内容,那么当您单击后退按钮时,您的内容将不会更新到第一页。因为调用getPreviousPage()时不会调用createContent()。
答案 1 :(得分:0)
我找到了解决方案,但是 - 我必须承认 - 这是非常愚蠢的错误。将setControl(container);
更改为setControl(scroll);
就足够了。现在每个页面都正确显示。请在将来注意这些事情:)