JFace向导在最后一页显示数据

时间:2012-08-16 18:20:12

标签: java swt jface

我有一个带有3个WizardPages的向导,每个页面都有小部件来保存用户的输入,我需要添加最后一页,保存用户输入的所有信息。

我不知道该怎么做,因为4页是同时创建的。

Public Wizard(){
    addPage(new Page1()) ;
    addPage(new Page2()) ;
    addPage(new Page3()) ;
    addPage(new PageSummary()) ;

}

如何根据前几页输入内容更改PageSummary Controls?

编辑: 我找到了a post,这正是我想要的,使用onEnterPage()方法看起来很聪明,以下是我试过的方法:

public class NewEquipementSummaryPage extends WizardPage {
    public void createControl(Composite parent) {
    // composite to hold widgets 
    Composite composite = new Composite(parent, SWT.NONE) ;

    // composite layout 
    GridLayout gl = new GridLayout(2, false) ;
    composite.setLayout(gl) ;

    // making widgets 
    createWidgets(composite) ;
    setControl(composite) ;
}

    public void onEnterPage() {
    TypeEquipementPage typePage = (TypeEquipementPage) getWizard().getPage(TypeEquipementPage.PAGE_NAME) ;
    CompanySellerPage companyPage = (CompanySellerPage) getWizard().getPage(CompanySellerPage.PAGE_NAME) ;
    EquipementUserPage userPage = (EquipementUserPage) getWizard().getPage(EquipementUserPage.PAGE_NAME) ;

    if(typePage.types[0].getSelection() == true)
        typeEquipementLabel.setText("Poste de travail") ;
    else
        typeEquipementLabel.setText("Peripherique") ;

    marqueEquipementLabel.setText(typePage.marquesCombo.getText()) ;
    descriptionEquipementLabel.setText(typePage.descriptionField.getText()) ;

    if(companyPage.companyExistButton[0].getSelection() == true) {
        companyNameLabel.setText(companyPage.companiesCombo.getText()) ;
    }
    else{
        companyNameLabel.setText(companyPage.companyNameField.getText()) ;
        companyAdressLabel.setText(companyPage.companyAdressField.getText()) ;
        companyNumberLabel.setText(companyPage.companyNumberField.getText()) ;
    }

    if( !(userPage.sharedEquipementButton.getSelection()) )
        useOfEquipementLabel.setText("Utilisateur") ;
    else
        useOfEquipementLabel.setText("Bureau") ;

    pack() ;
}

最后使用pack()方法,编译时出错(找不到符号)

没有它,页面上没有任何内容..我错过了什么?

2 个答案:

答案 0 :(得分:3)

尝试覆盖DialogPage#setVisible中的NewEquipementSummaryPage并从那里致电onEnterPage

public void setVisible(boolean visible) {

    super.setVisible(visible);

    if (visible) {

        onEnterPage();
    }
}

(以及按照SoboLAN的回答中的建议更改为composite.pack()

答案 1 :(得分:0)

我认为您需要composite.pack (),而不仅仅是pack ()。为此,请将composite变量存储为您班级中的private字段(以便您可以使用onEnterPage方法对其进行访问。)