Rückgabewert aus Klasse mit JDialog

Status
Nicht offen für weitere Antworten.

le_manchot

Mitglied
Hallo,

folgendes Problem:

Ich habe eine Klasse A, die einen modalen JDialog auf einem unsichtbaren JFrame der Klasse B generiert. Die Werte, die in der Klasse des Dialogs entstehen, sollen beim Schließen mittel OK-Button des Dialogs an Klasse A zurück gegeben werden.

Wie schaffe ich es, Klasse A den Wert aus dem Dialog zu übergeben?

Irgendwie habe ich gerade einen kleinen Knoten in den Synapsen.

Dank und Gruß
 

Zed

Bekanntes Mitglied
Mach ne private Variable im Dialog und holl dir den Wert mit einem Getter.
 

le_manchot

Mitglied
Zed hat gesagt.:
Mach ne private Variable im Dialog und holl dir den Wert mit einem Getter.

Ich konnte das Problem lösen, es verlangt ein "umgekehrtes" Denken. Vielen Dank für Deinen Vorschlag, Zed. So kann es nicht funktionieren, da die Klasse A ja erst auf Werte des JFrame der Klasse B zugreifen könnte, wenn dieser geschlossen ist. Dies liegt an der (gewollt) modalen Darstellung. Aus einem Objekt der Klasse A könnte also erst eine Methode der Klasse B aufgerufen werden, wenn diese schon wieder zerstört wurde.

Die Lösung ist andersrum. Das Objekt A ruft Objekt B auf und übergibt sich selbst als Parameter "this" an den Konstruktor von B. B ruft dann ein A.setXYZ() auf.
 

UnkiDunki

Bekanntes Mitglied
Die Lösung ist andersrum. Das Objekt A ruft Objekt B auf und übergibt sich selbst als Parameter "this" an den Konstruktor von B. B ruft dann ein A.setXYZ() auf.

Eine Frage dazu:
Wenn ich jetzt die Situation habe, dass nicht nur Objekt A auf B zugreift, sondern noch andere Objekte, so muss ich doch am besten JDialog überschreiben, Getter und Setter für den Werteaustausch einführen und schließlich alle betreffen Dialoge von der neuen Klasse ableiten...
Und wenn dann auch noch Objekt E auf F zugreifen möchte und dabei komplett andere VarTypen verlangt werden mit Object arbeiten und dann hinterher casten? Ist das so die optimalste Lösung oder geht das ganze eleganter?

Code:
public class JDialogExchange extends JDialog{

	/**
	 * 
	 */
	@SuppressWarnings("unused")
	private Object value = null;
	
	private static final long serialVersionUID = 1L;

	JDialogExchange(){
		super();
	}
	
	JDialogExchange(String title){
		super(title);
	}
	
	public void setExchangeValue(Object valueExt){
		value = valueExt;
	}
	
	public Object getExchangeValue(){
		return value;
	}
	
	public void resetExchangeValue(){
		value = null;
	}
}

Am besten wäre es natürlich wenn z.B. Object B vor dem Schließen einen Wert zurückgeben könnte, aber das wird nicht gehen oder?
So in etwa:

Code:
JDialog dialog = new JDialog(this);
int value = 0;
		dialog.setVisible(true);
		
		dialog.addWindowListener(new WindowAdapter(){
	  		public void windowClosed/Closing(WindowEvent e){
	  			value = dialog.getValue();
                                dialog.dispose();
	  		}
	  	});

Das ist ja leider nicht möglich, aber so würde man sich die ganzen Umstände, die bei meinem oberen Vorschlag ja anfallen, sparen...

Freue mich über jeden Hinweis und Anregung :) Danke
 

slawaweis

Bekanntes Mitglied
Hallo le_manchot,

Ich habe eine Klasse A, die einen modalen JDialog auf einem unsichtbaren JFrame der Klasse B generiert. Die Werte, die in der Klasse des Dialogs entstehen, sollen beim Schließen mittel OK-Button des Dialogs an Klasse A zurück gegeben werden.

Wie schaffe ich es, Klasse A den Wert aus dem Dialog zu übergeben?
zuerst eine Sache zu dem "unsichtbaren JFrame". Ich weis jetzt nicht genau, welche Funktionalität noch dahinter steckt, aber ein JDialog kann auch mit "null" als Parent konstruiert werden, ein unsichtbares JFrame ist dann nicht notwenig. Componenten, die nie auf den Bildschirm kommen, sollte man soweit es geht vermeiden.

Jetzt zu dem modalen Dialog. Eine gute Lösung in so einem Fall wäre zu dem Aufrufer A und dem modalen Dialog B zusätzlich ein Datenmodel C zu definieren, wobei C klonbar sein muss. C ist dann eben eine Klasse, die alle benötigten Daten für den Dialog B enthält. Dann müsste B A nicht kennen und so könnte B von jeder beliebigen Klasse aufgerufen werden. Der Aufruf könnte so aussehen:

Code:
// Model C anlegen und setzen
C c = ...;

// ...

B b = new B();
b.setModel(c); // in setModel() wird c geklont und B arbeitet nur auf einer Kopie
b.show(); // Dialog anzeigen
// Dialog wird geschlossen
if(b.getStatus() == OK) // prüfen, was der User am Ende geklickt hat, z.B. "OK" oder "Abbrechen"
  {
  c = b.getModel(); // gibt das veränderte Model oder eine Kopie dessen zurück
  // alternativ: c.setData(b.getModel());
  }
b.dispose();
b = null;

Slawa
 
Zuletzt bearbeitet:

UnkiDunki

Bekanntes Mitglied
Hi,

du hast jetzt le_manchot geantwortet, der das "Dingen" vor mehr als 4 Monaten als "Erledigt" abgehakt hat.
Könntest du vielleicht noch auf meine Idee eingehen?
Alle anderen sind natürlich auch herzlich dazu eingeladen :)
 
S

SlaterB

Gast
1.
es ist möglichen, einen Listener zu adden,
falls WindowListener nicht geht, dann definiere dir doch in der Basisklasse eine neue Liste von eigenen Listenern,
die beim Schließen aufgerufen werden,

kommt natürlich darauf an, auf wieviel verschiedene Weisen der Dialog beendet wird/ ob du das kontrollierst,
wenn du überall einheitlich einen Ok + Abbrechen-Button hast,
dann musst du nur bei ActionListenern auf diesen Buttons aktiv werden,

vielleicht auch ComponentListener oder was auch immer

-----

2.
Code:
JDialog dialog = new JDialog(this);
int value = 0;
        dialog.setVisible(true);
 
        dialog.addWindowListener(new WindowAdapter(){
              public void windowClosed/Closing(WindowEvent e){
                  value = dialog.getValue();
                                dialog.dispose();
              }
          });

bei einem modalen Dialog ist der Aufrufer nach setVisible() blockiert, denkbar wäre also auch ganz kurz:

Code:
JDialog dialog = new JDialog(this);
int value = 0;
        dialog.setVisible(true);
        value = dialog.getValue();

(== erste Antwort von Zed)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
kodela Falscher Rückgabewert AWT, Swing, JavaFX & SWT 12
B Swing Windowbuilder Rückgabewert im Event AWT, Swing, JavaFX & SWT 3
J Action Listener Rückgabewert AWT, Swing, JavaFX & SWT 14
S Swing Eigenen JDialog mit Rückgabewert AWT, Swing, JavaFX & SWT 3
A Swingworker rückgabewert verwenden AWT, Swing, JavaFX & SWT 9
J Swing JDialog mit static-Funktion anzeigen -> Rückgabewert AWT, Swing, JavaFX & SWT 3
C Warten auf Rückgabewert im EventDispatchingThread AWT, Swing, JavaFX & SWT 8
GilbertGrape Wie komm ich an Rückgabewert des SwingWorkers? AWT, Swing, JavaFX & SWT 6
R Rückgabewert TreeSelectionListener für JInternalFrame AWT, Swing, JavaFX & SWT 4
A showConfirmDialog (Rückgabewert abfragen?) AWT, Swing, JavaFX & SWT 3
M Eigene Java Klasse für allgemeine Grafikelemente AWT, Swing, JavaFX & SWT 8
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
_user_q Versionscode aus build.gradle in Java-Klasse ausgeben lassen AWT, Swing, JavaFX & SWT 14
H MouseAdapter Klasse nutzen wenn eigene Klasse bereits von anderer erbt AWT, Swing, JavaFX & SWT 13
Jose05 JavaFx Fxml: GUI aus einer anderen Klasse starten AWT, Swing, JavaFX & SWT 1
T JavaFX TableColumn in separate Klasse auslagern AWT, Swing, JavaFX & SWT 7
Monokuma KeyEvent in der Canvas Klasse AWT, Swing, JavaFX & SWT 0
B Was würden Profis an meiner Klasse verbessern? AWT, Swing, JavaFX & SWT 1
B JavaFX Verständnisfrage EventHandler<ActionEvent> Implementierung in meiner Klasse AWT, Swing, JavaFX & SWT 2
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
S Stream API, Anonyme Klasse AWT, Swing, JavaFX & SWT 8
B JavaFX Von welcher Klasse und zu welchem Zeitpunkt werden Event-Objekte erstellt? AWT, Swing, JavaFX & SWT 3
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
F jTree und das Model aus einer eigenen Klasse AWT, Swing, JavaFX & SWT 1
F Jtree aus Klasse mit Arraylisten AWT, Swing, JavaFX & SWT 1
L Javafx Controller Klasse in Maven AWT, Swing, JavaFX & SWT 7
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
J Bild von anderer Klasse will nicht laden AWT, Swing, JavaFX & SWT 1
L CardLayout in einer Klasse? AWT, Swing, JavaFX & SWT 2
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
ralfb1105 Swing Ausführung einer SwingWorker Klasse stoppen AWT, Swing, JavaFX & SWT 4
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
J 2D-Grafik Background einer Jpanel Klasse ändern AWT, Swing, JavaFX & SWT 1
J JFram Location aus Konstruktor einer anderen Klasse auslesen AWT, Swing, JavaFX & SWT 10
J 2D-Grafik Background Image Klasse AWT, Swing, JavaFX & SWT 14
K Frame aus anderer Klasse schließen AWT, Swing, JavaFX & SWT 3
M Eigene Klasse mit Grafikobjekten schreiben AWT, Swing, JavaFX & SWT 4
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
it_is_all Event Handling ActionListener in anderer Klasse klappt nicht AWT, Swing, JavaFX & SWT 4
L JavaFX button über andere Klasse ändern AWT, Swing, JavaFX & SWT 7
K über Button andere Java Klasse aufrufen AWT, Swing, JavaFX & SWT 15
C Nach Aufruf von anderer Klasse streikt Grafik AWT, Swing, JavaFX & SWT 1
S per Button Variableninhalt aus anderer Klasse holen AWT, Swing, JavaFX & SWT 3
F AWT Robot Klasse Screenshot nach Pixelmustern in bestimmten Radius um Bildschirmmittelpunkt absuchen AWT, Swing, JavaFX & SWT 13
K JButton auf anderer Klasse AWT, Swing, JavaFX & SWT 6
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
Java_RY AWT Frame in eine eigene klasse auslagern und aufrufen AWT, Swing, JavaFX & SWT 6
L JavaFX Verbindung zwischen Beschreibung und Listener (Codebehind Klasse) AWT, Swing, JavaFX & SWT 4
J JTextfield automatisch aus zweiter Klasse aktualisieren AWT, Swing, JavaFX & SWT 5
J JavaFX Tableview Daten hinzufügen aus anderer Klasse AWT, Swing, JavaFX & SWT 7
Ghostman1711 GUI Java von Klasse mit Application Windows anderes Application Window aufrufen AWT, Swing, JavaFX & SWT 6
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
N JavaFX Erweitern der Line(Shape)-Klasse AWT, Swing, JavaFX & SWT 1
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
7 JavaFX Verwendung einer ResizableCanvas-Klasse in fxml-Datei AWT, Swing, JavaFX & SWT 3
A JavaFX Von Klasse auf Controller Inhalt zugreifen AWT, Swing, JavaFX & SWT 9
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
J Eigene Klasse auf Basis Textfield in SceneBuilder anzeigen AWT, Swing, JavaFX & SWT 4
B Swing Auf JList-Elemente aus einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 1
J JavaFX Mehrfache Benutzung von Methoden einer Klasse AWT, Swing, JavaFX & SWT 17
B Jlabel Text von anderen Klasse aus ändern AWT, Swing, JavaFX & SWT 9
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
N JavaFX GUI Elemente einer anderen (FXML)Klasse ansprechen AWT, Swing, JavaFX & SWT 16
O JTabeddpane aber jedes JPanel als eigene Klasse anlegen AWT, Swing, JavaFX & SWT 7
B Swing GUI in einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 4
B Klasse mit ArrayList AWT, Swing, JavaFX & SWT 1
G Event Handling Event Handling in eigene Klasse AWT, Swing, JavaFX & SWT 4
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7
L JavaFX Verständnisfrage zu JavaFX FXML und Controller-Klasse AWT, Swing, JavaFX & SWT 1
T Generische Klasse in JList über DefaultListModel AWT, Swing, JavaFX & SWT 1
D Event Handling Aus einer anderen Klasse heraus einen Text des JLabels ändern. AWT, Swing, JavaFX & SWT 12
F Instanzierung einer inneren Klasse in Klasse eines anderen Packets AWT, Swing, JavaFX & SWT 3
C JavaFX Zugriff auf TextField aus einer anderen Klasse AWT, Swing, JavaFX & SWT 4
A JavaFX Scene Builder eigene Klasse hinzufügen AWT, Swing, JavaFX & SWT 2
S 2 Paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
D JavaFX Controller Klasse splitten? AWT, Swing, JavaFX & SWT 16
S JComboBox aus anderer Klasse füllen (Java-Swing) AWT, Swing, JavaFX & SWT 0
S ActionListener Klasse aufrufen AWT, Swing, JavaFX & SWT 4
M Swing JTextField getText Mehtode übergeben in eine Klasse zu einer Rechnung AWT, Swing, JavaFX & SWT 1
M Panel in geerbter JFrame Klasse adden AWT, Swing, JavaFX & SWT 4
F JavaFX Zugriff auf Controller Methode von einer normalen Klasse aus AWT, Swing, JavaFX & SWT 4
D AWT Das ganze GUI in eine Klasse? AWT, Swing, JavaFX & SWT 1
C JavaFX Klasse wird nicht als public erkannt AWT, Swing, JavaFX & SWT 6
J zwei Paint methoden in einer Klasse AWT, Swing, JavaFX & SWT 3
V kann ich in einer Klasse stage und scene deklarieren, aber in anderen Klassen Inhalte hinzufügen ? AWT, Swing, JavaFX & SWT 5
V JavaFX, Pane construktor von einer Klasse in der Main verwenden. AWT, Swing, JavaFX & SWT 4
S 2 paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
W JavaFX Label in Controller-Klasse in einer anderen Controller-Klasse ändern AWT, Swing, JavaFX & SWT 9
X buttons aus externe klasse lesen? AWT, Swing, JavaFX & SWT 3
D Swing JTable- Meine Tabelle der Klasse JTable wird nur bedingt angezeigt AWT, Swing, JavaFX & SWT 4
M Gui in einer anderen Java Klasse aufrufen AWT, Swing, JavaFX & SWT 1
A Problem mit JFrame in separater Klasse AWT, Swing, JavaFX & SWT 3
A Swing bei Auswahl und klick eines JComboBox buttons die Klasse eines anderen Projekts aufrufen AWT, Swing, JavaFX & SWT 3
C Swing MenuBar als eigene Klasse AWT, Swing, JavaFX & SWT 4
D Nächste GUI in einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 7
A Swing JTextArea aus anderer Klasse in realtime aktualisieren AWT, Swing, JavaFX & SWT 3
JavaInBrain Swing Rückgabe aus MouseListener-Klasse AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben