[Swing] Daten von einer Wizardpage zur nächsten übertragen

Online-Skater

Erfahrenes Mitglied
Hallo Tutorianer,

ich möchte gerne die Wizard API von java.net siehe https://wizard.dev.java.net/ benutzen und habe mich auch schon darüber informiert unter anderem auf Open source Java projects: The Wizard API und Using the Wizard API Das gefällt mir alles sehr gut bis auf eine Sache: Es scheint keine angemessene Methode zu geben wie ich Daten von einer WizardPage zu einer anderen bekomme. Ich habe die suche bemüht und unter anderem den Beitrag JFace Wizard: Daten von einer Wiazardpage zu einer anderen Wizardpage übertragen gefunden. Jedoch kann ich dieses Vorgehen nicht auf meine API übertragen.
Kennt sich vielleicht jemand mit der Wizard API von java.net aus und wüßte wie man da vorgehen kann ?
Das Problem ist das die Daten (die vom Benutzer eingegeben werden) erst zur Laufzeit vorliegen und die WizardPages zu dieser Zeit schon konstruiert worden sind. Der Zugriff auf die Daten wird mittels einer Methode der WizardPage erlaubt, jedoch habe ich kein Zugriff auf die nächste oder sonst einer anderen WizardPage von der aktuellen WizardPage. Eine Lösung bestünde in einer alternativen Vorgehensweise, in der die WizardPages erst zur Laufzeit erstellt werden (siehe hier) doch diese Vorgehensweise ist für mein Vorhaben nicht sehr elegant, da man hier ziemlich viel manuell nachimplementieren muss.

Irgendwelche Ideen ? Wäre doch schade wenn ich mich noch mal in den JFace Wizard einarbeiten müsste, denn ansonsten ist der Wizard von java.net echt top.

Beispiel:
Java:
// WizardPage2
public WizardPage2()
   {
      // code
      txtField1 = new JTextField (20);
      txtField1.setName ("third");
      // setze Textfeld mit Datum von WizardPage1
      txtField1.setText(getWizardData("first").toString()); // Datum existiert noch nicht !
      //code
}

Beste Grüße
Online-Skater
 
Zuletzt bearbeitet von einem Moderator:
Problem wurde selbst gelöst, beim durchstöbern des Quellcodes "WizardPage.java" fiel mir die Methode:
Java:
/**
     * Called whenever the page is rendered.
     * This can be used by the page as a notification
     * to load page-specific information in its fields.
     * <p/>
     * By default, this method does nothing.
     */
    protected void renderingPage() {
        // Empty
    }
auf.
Also in der abgeleiteten Klasse überschreiben und es funktioniert:
Java:
@Override
	protected void renderingPage() 
   	{
		super.renderingPage();
		txtField1.setText(getWizardData("first").toString());
	}

Wer lesen kann ist klar im Vorteil :)
Es gibt einen Konstruktor im Wizard, welcher nur die Klassenobjekte entgegennimmt und sie zur Laufzeit erstellt.
An array of Class objects. Each Class object in the array must describe a unique WizardPage subclass. At runtime, Wizard lazily creates instances of these classes on an as-needed basis (to reduce object creation). If you want all of these instances to be created up front, invoke a createWizard() method that provides a WizardPage[] parameter.
Java:
//All we do here is assemble the list of WizardPage subclasses we
//want to show:
Class[] pages = new Class[] {
    WizardPage1.class,
    WizardPage2.class,
};
        
//Use the utility method to compose a Wizard
Wizard wizard = WizardPage.createWizard(pages, WizardResultProducer.NO_OP);
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück