2015-10-23 7 views
0

Я использую CJWizard для создания мастера с 2 страницами, где вторая страница основана на выборе первой страницы.Java Wizard условный следующая страница

Итого, поэтому у меня есть 3 страницы мастера.

public class WizardTest extends JDialog 
{ 

    public static void main(String[] args) 
    { 
     WizardTest test = new WizardTest(); 
     test.setVisible(true); 
    } 

    public WizardTest() 
    { 
     final WizardContainer wc 
       = new WizardContainer(new TestFactory(), 
         new TitledPageTemplate(), 
         new StackWizardSettings()); 

     wc.addWizardListener(new WizardListener() 
     { 
      @Override 
      public void onCanceled(List<WizardPage> path, WizardSettings settings) 
      { 
       WizardTest.this.dispose(); 
      } 

      @Override 
      public void onFinished(List<WizardPage> path, WizardSettings settings) 
      { 
       WizardTest.this.dispose(); 
      } 

      @Override 
      public void onPageChanged(WizardPage newPage, List<WizardPage> path) 
      { 
       WizardTest.this.setTitle(newPage.getDescription()); 
      } 
     }); 

     this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
     this.getContentPane().add(wc); 
     this.pack(); 
    } 

    private class TestFactory extends APageFactory 
    { 

     private final WizardPage[] pages = 
     { 
      new WizardPage("One", "First Page") 
      { 
       { 
        String[] choices = 
        { 
         "Two", "Three" 
        }; 
        JComboBox jComboBox = new JComboBox(new DefaultComboBoxModel(choices)); 
        jComboBox.setName("nextPage"); 
        add(new JLabel("Which Page Next?")); 
        add(jComboBox); 
       } 
      }, 
      new WizardPage("Two", "Second Page") 
      { 
       { 
        add(new JLabel("Two!")); 
        setBackground(Color.CYAN); 
       } 

       @Override 
       public void rendering(List<WizardPage> path, WizardSettings settings) 
       { 
        super.rendering(path, settings); 
        setFinishEnabled(true); 
        setNextEnabled(false); 
       } 

      }, 
      new WizardPage("Three", "Third Page") 
      { 
       { 
        add(new JLabel("Three!")); 
        setBackground(Color.MAGENTA); 
       } 

       @Override 
       public void rendering(List<WizardPage> path, WizardSettings settings) 
       { 
        super.rendering(path, settings); 
        setFinishEnabled(true); 
        setNextEnabled(false); 
       } 
      } 
     }; 

     @Override 
     public WizardPage createPage(List<WizardPage> path, 
       WizardSettings settings) 
     { 
      WizardPage page; 

      if (path.size() == 1) 
      { 
       String assignmentSelection = (String) settings.get("nextPage"); 
       if (assignmentSelection.equalsIgnoreCase("Three")) 
       { 
        page = pages[path.size() + 1]; 
       } 
       else 
       { 
        page = pages[path.size()]; 
       } 
      } 
      else 
      { 
       page = pages[path.size()]; 
      } 
      return page; 
     } 
    } 
} 

указанных работ только на первый визит мастера, если я вернуться к первой странице из (выбранной) второй страницы и изменить выбор на первой странице в createPage() не вызывается снова и показана уже созданная страница.

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

ответ

0

Каждая страница может расширяет WizardPage, так что вы можете использовать метод: getNextPage и изменения, как вы хотите, чтобы следующая wizardPage, они могут быть идентифицированы по имени, которое вы используете в конструкторе ... Пример условных Page поток:

public IWizardPage getNextPage() { 
      // If they have complaints, go to the normal next page 
      if (radioButtonRookies.getSelection()) { 
       return super.getNextPage(); 
      } 
      // No complaints? Short-circuit the rest of the pages 
      return getWizard().getPage("generator"); 
     } 
+0

Я не могу использовать super.getNextPage(), потому что мне нужно настроить таргетинг на индексную страницу, не следующий(), и я не могу это сделать из WizardPage, потому что тогда я должен передать массив можно страниц на каждую страницу WizardPage. В лучшем случае это кажется запутанным. –