Eigener JDialog

Guadrion

Mitglied
Hi wie kann ich erreichen, dass bei BEstätigen eines Buttons auf meinem eigenen JDialog abgeleiteten Dialog ein Objekt an das parent Objekt zurückgeliefert wird, welches den Dialog erzeugt hat?
 
Moin,

was genau willst Du denn zurückgeben :confused:
Nach Beendigung Deines eigenen Dialogs solltest Du doch eigentlich an der aufrufenden Stelle (sprich: dem ParentObject) sein, oder nicht ? ? ?

Gruß
Klaus
 
Moin,

was genau willst Du denn zurückgeben :confused:
Nach Beendigung Deines eigenen Dialogs solltest Du doch eigentlich an der aufrufenden Stelle (sprich: dem ParentObject) sein, oder nicht ? ? ?

Gruß
Klaus

Ja genau, beim Erstellen des DIalogs übergeb ich dem DIalog einen selbstdefinierten Datentyp. Der nutzer muss im dialog dann ein paar einstellungen an meinem datentyp vornehmen und dieser datentyp soll danach wieder verändet zurückgegeben werden...
 
äääh ...

Code:
return MeinDatentyp;

oder wie :confused:

Oder poste mal den entsprechenden Code, vlt. versteht man dann, was Du genau willst!

Gruß
Klaus
 
äääh ...

Code:
return MeinDatentyp;

oder wie :confused:

Oder poste mal den entsprechenden Code, vlt. versteht man dann, was Du genau willst!

Gruß
Klaus

Code:
MeinDialog dia = new MeinDialog(parent, true, InstanzmeinesDTyps){
initComponents();
}

private void initComponents(){
ComboBox 1;
ComboBox 2;

//
Änderungen an der ComboxBox ändern dann Variablen in der InstanzmeinesDTyps


}


und ich will dass bei Beenden des JDialogs per Button eben das veränderte Objekt iwie zurückgegeben wird^^

Das ist ja meine Frage wie man das machen kann?
 
Hallo,

nee, dass hat jetzt bei mir für noch mehr Verwirrung gesorgt :suspekt:

MeinDialog dia = new MeinDialog(parent, true, InstanzmeinesDTyps)

Die Instanz Deines Datentyps "MeinDialog" ist doch "dia" ... warum übergibt Du sie denn im Konstruktor :confused:

Wenn es Dir um die geänderten Werte geht - da solltest Du get-/set-Methoden zum Setzen resp. Abfragen einbauen ! !

Gruß
Klaus
 
Hallo!

Du übergibst immer eine Referenz auf das Objekt, also eine Art Zeiger. Damit bekommt dein Dialog direkten Zugriff auf das Objekt, nicht etwa auf eine Kopie.

Wenn der Dialog also etwas am übergebenen Objekt ändert, dann bekommt anschließend auch die aufrufende Klasse in den Genuss der veränderten Werte in diesem Objekt.

Das funktioniert natürlich nicht bei primitiven Datentypen wie int, double oder boolean.

Hier ein kleines Beispiel:

MyChangableObject ist ein ganz simples Beispiel für ein Objekt, das du übergibst.

MyTestDialog ist ein ganz kleiner Dialog mit einem Button. Bei einem Klick auf diesen Button wird das im Konstruktor übergebene Objekt "verändert". Anschließend wird der Dialog unsichtbar

In der Main-Klasse wird das letztlich ausprobiert: Erst wird ein ChangableObject erzeugt, dann wird dessen Wert ausgegeben und ein TestDialog mit diesem Objekt erzeugt. Wenn der Dialog geschlossen wird, wird der Wert erneut ausgegeben.

Java:
package de.tutorials.rocme.JDialogStuff;

import java.awt.Dimension;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;


class MyChangableObject {
	int changableValue = 0;

	public int getChangableValue() {
		return changableValue;
	}

	public void setChangableValue(int changableValue) {
		this.changableValue = changableValue;
	}	
}

class MyTestDialog extends JDialog { 
	MyChangableObject objectToChange;
	  public MyTestDialog(Frame owner, MyChangableObject objectToChange) {
	    super(owner, true);
	    this.objectToChange = objectToChange;
	    JButton dialogButton = new JButton("change it!");
	    dialogButton.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				MyTestDialog.this.objectToChange.setChangableValue(1);
				MyTestDialog.this.setVisible(false);				
			}	    	
	    });
	    getContentPane().add(dialogButton);
	    this.setSize(new Dimension(100,100));
	  } 
	} 

public class Main {
	public static void main(String[] args) {
		final JFrame myFrame = new JFrame("myTestFrame");
		myFrame.setSize(new Dimension(200, 200));
		myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JButton myButton = new JButton("Click here for dialog");
		myButton.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				MyChangableObject myObject = new MyChangableObject();
				System.out.println("Before dialog, myObject's value = " + myObject.getChangableValue());
				MyTestDialog dialog = new MyTestDialog(myFrame, myObject);
				dialog.setVisible(true);
				System.out.println("After dialog, myObject's value = " + myObject.getChangableValue());
			}

		});
		myFrame.add(myButton);
		myFrame.setVisible(true);
	}
}

Ausgabe ist
Before dialog, myObject's value = 0
After dialog, myObject's value = 1

Hoffe, das ging in die richtige Richtung :)

Gruß,

RoCMe
 
Zurück