Permalink
Browse files

added an example of accessing values from previous pages.

  • Loading branch information...
1 parent 6c71cc3 commit d809e0432acd67e409959a3e7056b63c858bc7c3 creswick@gmail.com committed Jan 24, 2010
Showing with 173 additions and 0 deletions.
  1. +173 −0 src/org/ciscavate/cjwizard/WizardTest2.java
@@ -0,0 +1,173 @@
+/**
+ * Copyright 2008 Eugene Creswick
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.ciscavate.cjwizard;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.util.List;
+
+import javax.swing.JCheckBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.ciscavate.cjwizard.pagetemplates.TitledPageTemplate;
+
+/**
+ * This demo class uses a JDialog to hold the wizard.
+ *
+ *
+ * @author rcreswick
+ *
+ */
+public class WizardTest2 extends JDialog {
+
+ /**
+ * Commons logging log instance
+ */
+ private static Log log = LogFactory.getLog(WizardTest.class);
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+ // create the dialog, and show it:
+ WizardTest2 test = new WizardTest2();
+ test.setVisible(true);
+ }
+
+ public WizardTest2(){
+ // first, build the wizard. The TestFactory defines the
+ // wizard content and behavior.
+ final WizardContainer wc =
+ new WizardContainer(new TestFactory(),
+ new TitledPageTemplate(),
+ new StackWizardSettings());
+
+ // add a wizard listener to update the dialog titles and notify the
+ // surrounding application of the state of the wizard:
+ wc.addWizardListener(new WizardListener(){
+ @Override
+ public void onCanceled(List<WizardPage> path, WizardSettings settings) {
+ log.debug("settings: "+wc.getSettings());
+ WizardTest2.this.dispose();
+ }
+
+ @Override
+ public void onFinished(List<WizardPage> path, WizardSettings settings) {
+ log.debug("settings: "+wc.getSettings());
+ WizardTest2.this.dispose();
+ }
+
+ @Override
+ public void onPageChanged(WizardPage newPage, List<WizardPage> path) {
+ log.debug("settings: "+wc.getSettings());
+ // Set the dialog title to match the description of the new page:
+ WizardTest2.this.setTitle(newPage.getDescription());
+ }
+ });
+
+ // Set up the standard bookkeeping stuff for a dialog, and
+ // add the wizard to the JDialog:
+ this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+ this.getContentPane().add(wc);
+ this.pack();
+ }
+
+ /**
+ * Implementation of PageFactory to generate the wizard pages needed
+ * for the wizard.
+ */
+ private class TestFactory implements PageFactory{
+
+ /* (non-Javadoc)
+ * @see org.ciscavate.cjwizard.PageFactory#createPage(java.util.List, org.ciscavate.cjwizard.WizardSettings)
+ */
+ @Override
+ public WizardPage createPage(List<WizardPage> path,
+ WizardSettings settings) {
+ log.debug("creating page "+path.size());
+
+ // Get the next page to display. The path is the list of all wizard
+ // pages that the user has proceeded through from the start of the
+ // wizard, so we can easily see which step the user is on by taking
+ // the length of the path. This makes it trivial to return the next
+ // WizardPage:
+ WizardPage page = buildPage(path.size(), settings);
+
+
+ // if we wanted to, we could use the WizardSettings object like a
+ // Map<String, Object> to change the flow of the wizard pages.
+ // In fact, we can do arbitrarily complex computation to determine
+ // the next wizard page.
+
+ log.debug("Returning page: "+page);
+ return page;
+ }
+
+ private WizardPage buildPage(int pageCount, final WizardSettings settings) {
+ switch (pageCount) {
+ case 0:
+ return new WizardPage("One", "First Page"){
+ {
+ JTextField field = new JTextField();
+ // set a name on any component that you want to collect values
+ // from. Be sure to do this *before* adding the component to
+ // the WizardPage.
+ field.setName("city");
+ field.setPreferredSize(new Dimension(50, 20));
+ add(new JLabel("Enter City:"));
+ add(field);
+ }
+ };
+ case 1:
+ return new WizardPage("Two", "Second Page"){
+ {
+ // get a value out of the settings, and display it on the second page:
+ add(new JLabel("The city you entered was: "+settings.get("city")));
+
+ JTextField field = new JTextField();
+ field.setName("city");
+ field.setPreferredSize(new Dimension(50, 20));
+ add(new JLabel("Enter a different city:"));
+ add(field);
+ }
+ };
+ case 2:
+ return new WizardPage("Three", "Third Page"){
+ {
+ // get a value with the same key -- notice that it was altered by the user's input on page 2:
+ add(new JLabel("The city you entered was: "+settings.get("city")));
+ }
+ /**
+ * This is the last page in the wizard, so we will enable the finish
+ * button and disable the "Next >" button just before the page is
+ * displayed:
+ */
+ public void rendering(List<WizardPage> path, WizardSettings settings) {
+ super.rendering(path, settings);
+ setFinishEnabled(true);
+ setNextEnabled(false);
+ }
+ };
+ }
+ return null;
+ }
+
+ }
+}

0 comments on commit d809e04

Please sign in to comment.