Я использую 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() не вызывается снова и показана уже созданная страница.
Как я могу удалить предыдущие варианты и вернуться на первую страницу, не будучи всегда показан исходным?
Я не могу использовать super.getNextPage(), потому что мне нужно настроить таргетинг на индексную страницу, не следующий(), и я не могу это сделать из WizardPage, потому что тогда я должен передать массив можно страниц на каждую страницу WizardPage. В лучшем случае это кажется запутанным. –