首页 > 解决方案 > 如何在 SWT 中更新 PageBook 控件

问题描述

我目前正在使用 PageBook 控件来根据用户的操作显示不同的页面。

在此处输入图像描述

以下是上述 WizardPage 的简要来源:

override createControl(Composite parent) {
        var composite = new Composite(parent, SWT.NONE) as Composite;
        composite.setLayout(new GridLayout())
        createSelectDomainFileGroup(composite);
        createDomainGroup(composite);
        pageBook(composite)
        setControl(composite)
    }

我在此方法中添加了 pageBook(composite),因为我认为调用类时要调用的第一个方法 createControl() 最初应该指定所有区域。

这就是我希望它的工作方式。

  1. 选中“使用域自定义”复选框。
  2. 然后“选择文件”按钮被激活。
  3. 单击“选择文件”按钮并选择 Excel(.xls、.xlsx)文件的扩展名。
  4. 通过内部逻辑检查选中的文件是否损坏。
  5. 如果是普通文件,则在 PageBook 中更新所需的值。

pageBook 在以下条件下显示。

if (isValidExcelFile()) {
    Display.^default.asyncExec([
        setMessage(MessageFormat.format(Messages.ChooseDomainFileWizardPage_9, domainFileName));
        domainFileNameText.setText(domainFileName);
        setPageComplete(true);
        workbook = this.workbook
        pagebook.showPage(sheetPage)
    ])
    this.option.setExcelFile(true);
}

<< Modified >> sheetPage 创建如下。

def pageBook(Composite parent) {
        var container = parent as Composite

        container.Composite [
            new Composite(parent, SWT.NORMAL) => [
                layoutData = FILL_HORIZONTAL[]
                layout = GridLayout
                pagebook = PageBook[
                    layout = GridLayout
                    layoutData = FILL_HORIZONTAL[]
                ]
            ]
        ]

        // sheetPage
        sheetPage = pagebook.Composite [
            layout = GridLayout[
                numColumns = 2
                marginWidth = 0
                marginHeight = 0
                makeColumnsEqualWidth = false
            ]

            layoutData = FILL_HORIZONTAL


            new Label(it, SWT.NORMAL) => [
                text = Messages.ChooseDomainFileWizardPage_12
            ]
           ..... more source

<< 修改>> Pagebook 调用如下:

if (domainFileName.nullOrEmpty) {
            return;
        } else if (domainFileName.toLowerCase.endsWith(".xls") || domainFileName.toLowerCase.endsWith(".xlsx")) {
            this.option.filename = domainFileName;

            if (isValidExcelFile()) {
                Display.^default.asyncExec([
                    setMessage(MessageFormat.format(Messages.ChooseDomainFileWizardPage_9, domainFileName));
                    domainFileNameText.setText(domainFileName);
                    setPageComplete(true);
                    workbook = this.workbook
                    pagebook.showPage(sheetPage)
                ])

                this.option.setExcelFile(true);
        .... more source

但是,无法正确显示所需的值。在我看来,由于我在第一个 createControl() 上做了 pageBook(Composite).. 我认为 pageBook 区域中的控件显示了,但值没有更新。

我想知道如何刷新已经加载的pageBook控件的屏幕。

标签: swtrefreshjface

解决方案


推荐阅读