Мастер JFace показывает данные на последней странице

У меня есть Wizard с 3 WizardPages, каждая страница с виджетами содержит ввод данных от пользователя, мне нужно добавить последнюю страницу, содержащую всю информацию, введенную пользователем.

Я не знал, как это сделать, потому что 4 страницы создаются одновременно.

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

}

Как я могу изменить элементы управления PageSummary в зависимости от того, что введено на предыдущих страницах?

Изменить: я нашел пост, который делает именно то, что я хочу, используя метод 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() в конце у меня ошибка при компиляции (не могу найти символ)

а без него на странице ничего не появляется .. что я пропустил ?


person elaich    schedule 16.08.2012    source источник
comment
Метод onEnterPage, используемый в этой ссылке, — это просто настраиваемый метод для обработки входа на страницу в учебнике «Создание мастеров JFace». Он вызывается из их мастера, когда он вызывает их переопределенный Wizard#getNextPage. Ничто не вызовет его автоматически   -  person mecsco    schedule 20.08.2012


Ответы (2)


Попробуйте переопределить DialogPage#setVisible в NewEquipementSummaryPage и вызвать onEnterPage оттуда:

public void setVisible(boolean visible) {

    super.setVisible(visible);

    if (visible) {

        onEnterPage();
    }
}

(а также перейти на composite.pack(), как это предлагается в ответе SoboLAN)

person mecsco    schedule 20.08.2012

Я думаю, вы хотите composite.pack (), а не только pack (). Для этого сохраните переменную composite как поле private в вашем классе (чтобы вы могли получить к ней доступ в методе onEnterPage).

person Radu Murzea    schedule 17.08.2012
comment
это Composite.pack() .. и это не сработало, есть ли другой способ сделать то, что я пытаюсь сделать? последняя страница в мастере служит сводкой того, что пользователь ввел на всех предыдущих страницах, поэтому он может прочитать и изменить, нажав предыдущие и обновить значения, или подтвердить, нажав кнопку «Готово». я сделал пустые метки, где будет отображаться информация, используя метод setText() в onEnterPage().. - person elaich; 17.08.2012
comment
Я использовал журнал, чтобы увидеть, есть ли вызов метода onEnterPage(), но во время процесса вызывается только метод createControl(). Когда я проверил javadoc, в интерфейсе IWizardPage нет метода onEnterPage(), даже унаследованный .. Где этот метод ? - person elaich; 18.08.2012
comment
@elaich Я нашел этот метод здесь: eclipse.org/epf/composer_javadoc/1.0/org/eclipse/epf/library/ui/ . Однако я не знаю, какова его цель... - person Radu Murzea; 18.08.2012
comment
Метод onEnterPage в ссылке в вопросе OP - это просто настраиваемый метод для обработки входа на страницу в учебнике «Создание мастеров JFace». Он вызывается из их мастера, когда он вызывает их переопределенный Wizard#getNextPage. Ничто не вызовет его автоматически - person mecsco; 20.08.2012