Wert von JFrame zu JFrame übergeben

Alles was mit Swing und AWT zu tun hat

Moderatoren: wegus, Olek77

Antworten
Starship
Beiträge: 2
Registriert: 14.10.2014, 10:19

Wert von JFrame zu JFrame übergeben

Beitrag von Starship » 14.10.2014, 12:38

Hallo miteinander

Ich bin relativ neu im Programmieren mit Java und wollte mal kurz etwas fragen. Eventuell ist die Frage simpel zu beantworten aber ich komm leider nicht auf einen grünen Zweig.

Und zwar habe ich in NetBeans ein JFrame auf der man ein Geburtsdatum eingeben kann. Aus dem Geburtsdatum wird dann das entsprechende Sternzeichen ermittelt. Nun will ich aber den Text z.B. Skorpion oder Löwe in einem anderen JFrame ausgeben. Also man kann dann auf "Calculate" klicken und wird weitergeleitet. Dort erscheint dann das entsprechende Sternzeichen-Bild und der Name des Sternzeichens.

Wie schaffe ich es damit im zweiten JFrame der übergebene Wert erscheint? Geht das überhaupt?

Mit freundlichen Grüssen

Benutzeravatar
smurfi
Site Admin
Beiträge: 1639
Registriert: 29.06.2006, 11:33
Wohnort: Wuppertal
Kontaktdaten:

Re: Wert von JFrame zu JFrame übergeben

Beitrag von smurfi » 14.10.2014, 15:04

Hallo,

schaue dir das mal an http://www.netbeans-forum.de/viewtopic. ... eben#p2841.
Hilft dir das weiter?

Gruß
Michael

Starship
Beiträge: 2
Registriert: 14.10.2014, 10:19

Re: Wert von JFrame zu JFrame übergeben

Beitrag von Starship » 15.10.2014, 19:49

Ja ich glaube das ist etwas in die richtige Richtung und tönt alles gut.

Nur verstehe ich es immer noch nicht so ganz...
Ich öffne das neue JFrame ja mit new blabla().setVisible(true);

Aber was muss ich denn jetzt eingeben damit ich z.B. einfach schreiben kann xyTextField.setText("Widder");?
Das Textfield ist ja in einem anderen Frame und dieses erkennt das nicht.

Mit freundlichen Grüssen

Benutzeravatar
smurfi
Site Admin
Beiträge: 1639
Registriert: 29.06.2006, 11:33
Wohnort: Wuppertal
Kontaktdaten:

Re: Wert von JFrame zu JFrame übergeben

Beitrag von smurfi » 15.10.2014, 19:58

Du könntest z.B. in deinem neuen JFrame eine Methode erstellen 'setXyTextField' und in dieser übergibst du deinen Text.
Hier ist auch noch ein link von einer andere Seite:
http://forum.byte-welt.net/threads/2661 ... gui-frames

Gruß
Michael

ebaumann
Beiträge: 288
Registriert: 22.01.2009, 08:53
Wohnort: Würzburg
Kontaktdaten:

Re: Wert von JFrame zu JFrame übergeben

Beitrag von ebaumann » 16.10.2014, 21:05

Falls nach dem Klick auf "Calculate" ein Frame geöffnet wird, ist das wenig spannend. Im zweiten Frame muss lediglich ein Setter für das Datum existieren, der vor dem Anzeigen aufgerufen wird, das Anzeigen wertet das gesetzte Datum aus.

Sinnvoller ist, Components über ein Model zu synchronisieren. Beide Components (Frames etc.) nutzen das gleiche Model (die gleiche Klasseninstanz), das bei Änderungen Interessenten (Listener, Beobachter) benachrichtigt. Dann wird auch ein nicht geschlossenes Frame immer richtig reagieren und das richtige (aktualisierte) Sternzeichen anzeigen. In Java-Programmen nutzen Components häufig PropertyChangeListener. Dein Model benachrichtigt angemeldete PropertyChangeListener - deine Component, die Sternzeichen anzeigt, falls ein Geburtsdatum gesetzt wird. Das Setzen geschieht bei Klick auf "Calculate". Beispiel:

Code: Alles auswählen

public final class BirthdayModel {

    private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
    private Date birthday;

    public Date getBirthday() {
        return new Date(birthday.getTime());
    }

    public void setBirthday(Date birthday) {
        Date old = this.birthday;
        this.birthday = new Date(birthday.getTime());
        pcs.firePropertyChange("birthday", old, birthday);
    }

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        pcs.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        pcs.removePropertyChangeListener(listener);
    }
}
In der 2. Component (Frame) lässt sich ein PropertyChangeListener-Field erzeugen:

Code: Alles auswählen

private final PropertyChangeListener birthdayChangedListener = new PropertyChangeListener() {
    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        if ("birthday".equals(evt.getPropertyName())) {
            showZodiacSign(); // Sternzeichen anzeigen
        }
    }
};
und dies dann als Listener anmelden: model.addPropertyChangeListener(birthdayChangedListener). Wird ein Frame geschlossen/Component entfernt, nicht vergessen model.removePropertyChangeListener(birthdayChangedListener) aufzurufen, sonst gibt es Memory Leaks (Component wird nicht gelöscht, da Model diese noch referenziert)!

Antworten