Rückgabewerte bei Java-Fenstern

mj

Technische Administration, Dinosaurier, ,
Mitglied seit
17.10.2000
Beiträge
19.529
Renomée
272
Standort
Austin, TX
Also entweder ich bin zu blöd oder es geht nicht, folgendes habe ich vor:

Aus einem Frame heraus wird ein zweites Frame instanziiert, welches in einem Feld einen gewissen dort einzugebenden Wert suchen soll. Wenn es diesen Wert findet, soll das Fenster geschlossen werden, den Wert und true zurückgeben, wenn es den Wert nicht findet soll es geschlossen werden, den Wert und false zurückgeben...
Ich krieg das ums verrecken nicht hin, hat jemand einen Tipp? Der Wink zu nützlicher Dokumentation wäre bereits hilfreich genug, es kann doch nicht unmöglich sein, neue Fenster zu instanziieren und beim Schließen (oder betätigen eines Buttons) Werte zurückgeben zu lassen.
 
Da gibt's keinen direkten Weg so weit ich weiß.
Was man machen kann, ist, dem 2ten Frame ne Referenz z.B. auf den ersten Frame (oder auf ein anderes Objekt) zu übergeben, so dass der 2te Frame dem ersten Frame den Wert über einen entsprechenden Methodenaufruf oder über ein Event übergeben kann (frame1.setBlabla(wert, true); )
 
GAH! Ich frag mich, warum das bei Java so unnötig kompliziert gemacht wird... aber was solls, da muss ich durch :-/
 
Naja, mit 2 Rückgabewerten isses allgemein schwierig - entweder, man verpackt beide in irgendeine Art Container und gibt diesen zurück oder man schreibt eben einen oder beide der Rückgabewerte in ein Objekt, auf das eine Referenz übergeben wurde.

Edit (Müll gelöscht):
Das hat mich jetzt doch etwas beschäftigt...
Was funktioniert:
Code:
class WertThread extends Thread {
        
        WertFrame gui;
        Wert wert;
        
        public WertThread(WertFrame gui, Wert wert) {
            this.gui = gui;
            this.wert = wert;
        }
        
        public void run() {
            int i;
            for (i=0; i< 10000; i++) {//lange Berechnung
                gui.update(i);
                Thread.yield();//unterbrechen, um GUI-Updates u.ä. Zeit zu geben
            }
            this.wert.setWert(i);
            gui.close();
        }
    }
Aufruf:
Code:
        Wert wert = new Wert();
        WertFrame gui = new WertFrame();
        new WertThread(gui, wert).start();
        gui.show();
        System.out.println("Ergebnis: "+wert.getWert());
Der Thread muss gestartet werden, bevor gui.show() aufgerufen wird. Die GUI-Updates beschleunigne die Sache aber nicht gerade ;)
 
Zuletzt bearbeitet:
Das ist allerdings ziemlich unsauber.

Am saubersten, aber auch etwas aufwendiger, ist es, wenn Du die Infos mit Events verarbeitest.

Definier Dir am Besten ein eigenes Event und wirf das, wenn der Wert eingegeben wurde.
In dem Event selber kannst Du dann Methoden wie isOk() oder getWert() implementieren.

Dann brauchst Du noch einen Event-Listener, der auf das Event hört und bei Eintreten der Events irgendwas unternimmt (z.B. Wert und OK abfragen, ausgabe irgendwo starten).
 
Ja, am Saubersten isses mit Events - wenn man sich erstmal dazu durchgerungen hat, eigentlich auch garnicht so wild ;) (besonders, falls die IDE einem einen Teil der Arbeit abnimmt - könnt mir vorstellen, dass Eclipse das macht)
 
Ich hab die Lösung mittlerweile völlig anders implementiert, ich übergebe dem neuen Fenster eine Referenz des alten Fensters, blende dieses anschließend aus und rufe dann aus dem neuen Fenster eine Methode im alten Fenster auf, um Werte zu übergeben. Ist leicht, geht schnell und läuft 1A.
 
und wenn Du das Fenster dann mal von wo anders aufrufen möchtest musst Du alles neu schreiben :P ;D
 
Nö, überhaupt nicht. Mehrere Konstruktoren erlauben das Öffnen auf verschiedene Arten ;)
 
Zurück
Oben Unten