# Datenaustausch zwischen 2 Klassen



## MQue (13. Apr 2007)

hallo,

ich habe 2 Klassen und ich möchte Zugriff von der einen Klasse auf die methoden der anderen Klasse haben und von der 2. Klasse auf die Methodern der ersten Klasse. Um das zu erreichen, mache ich in der 1. Klasse ein Objekt der 2. Klasse und in der 2. Klasse ein Objekt der 1. Klasse -> und bekomme dadurch einen Stackoverflow.

Weiß jemand wie ich das anders lösen kann -> es geht primär um das, dass, wenn ich auf einen Button drücke, dann wird in der Ersten Klasse die Methode der 2. Klasse setData aufgerufen (in dieser Methode werden Daten in einem Array gespeichert) und wenn sich in diesem vorher erwähnten Array ein Wert ändert so wird eine Methode der 1. Klasse aufgerufen.

Vielleicht kann man das auch anders Lösen.
Bin dankbar für jede Antwort!!

lg
Michl


----------



## MQue (13. Apr 2007)

Vielleicht anders Formuliert:

ich habe ein Array[100] und einen Schalter, wenn ich den Schalter auf 1 schalte (der Schalter ist ein Button welchen ich mit einem Icon versehen habe), dann ist der passende Eintrag im Array[z.B.: 5] = 1 und wenn ich den Schalter wieder ausschalte, dann ist der Eintrag im Array wieder 0.
Jetzt möchte ich aber auch, dass, wenn ich im Array[5] den Eintrag von 1 auf 0 ändere, das aus-Icon am Schalter (Button) erscheint.

Weiß jemand wie ich das am Besten machen könnte?

Vielen dank.

lg


----------



## L-ectron-X (13. Apr 2007)

Trenne die Eigenschaften deiner Klassen vernünftig. Klasse A soll bspw, einen Button mit einem Icon haben und bei bestimmten Zuständen, das Icon wechseln. Klasse B braucht aber davon nichts zu wissen, sondern soll sich nur um die Daten, die in ihr _irgendwie_ gespeichert werden, kümmern.

Wenn du also den Knopf in A drückst, nimmt B Daten an, oder ändert sie und danach setzt A das Icon.

Durch richtige Methodenimplementierungen und Rückgabeparameter in beiden Klassen lässt sich das ganz einfach realisieren.


----------



## MQue (13. Apr 2007)

ja aber wie kann ich das lösen, wenn sich in der Klasse B im Array ein Eintrag z.B. von 1 auf 0 ändert, dass ich das in der Klasse A mitbekomme. Wenn der Schalter (Button) gedrückt wird, dann wird in Klasse A eben actionPerformed aufgerufen und in dieser Methode der Wert in iArr gesetzt.

Wenn ich jetzt in Klasse B im iArr den Wert ändere, soll sich das Icon auf dem Schalter wieder ändern.
Vielleicht kann mir da jemand helfen.

lg und vielen Dank



```
Klasse A

public class GUIControl implements ActionListener {
    private JankSchalter schalter;
    private ImageIcon buttonAus;
    private ImageIcon buttonEin; 
    private DatenSpeicher datenSpeicher = new DatenSpeicher();

    public GUIControl() {}
    
    public GUIControl(JankSchalter schalter, ImageIcon buttonAus, ImageIcon buttonEin) 
	{
	this.schalter = schalter;
	this.buttonAus = buttonAus;
	this.buttonEin = buttonEin;
	}

    public void actionPerformed(ActionEvent event) 
	{
	if (event.getActionCommand().equals("EinAusSchalter") && schalter.getIcon().equals(buttonAus))
	    {
	    schalter.setIcon(buttonEin);
	    datenSpeicher.setArrayEintrag(5,3, event.getActionCommand());
	    }
	else if (event.getActionCommand().equals("EinAusSchalter") && schalter.getIcon().equals(buttonEin))
	    {
	    schalter.setIcon(buttonAus);
	    datenSpeicher.setArrayEintrag(0,3, event.getActionCommand());
	    }
	} 
    

} 


Klasse B:

public class DatenSpeicher {
    private int[] iArr = new int[100];
    
    public DatenSpeicher() {
    }
    
    public void setArrayEintrag(int Wert, int index, String component) 
	{
        this.iArr[index] = Wert;
	// hier soll z.B. durch eine Tcpip-Schnittstelle ein eintrag im iArr verändert werden, z.B. von 1 auf 0
        // und dann soll eben im der Klasse A auf dem Schalter wieder der Icon buttonAus angezeigt werden
	} 
}
```


----------



## L-ectron-X (13. Apr 2007)

Wer übergibt denn Daten nach B? Eine weitere Klasse? Oder macht das auch A?

Edit: Ach du hast ja noch mal Code "nachgeschoben".


----------



## MQue (13. Apr 2007)

datenSpeicher.setArrayEintrag(5,3, event.getActionCommand()); -> so werden die Daten von der Klasse A an die Klasse B übergeben.

vielen dank


----------



## L-ectron-X (13. Apr 2007)

> // hier soll z.B. durch eine Tcpip-Schnittstelle ein eintrag im iArr verändert werden


Und wer macht die? Wird das auch von A erledigt, oder von einer weiteren Klasse?


----------



## MQue (13. Apr 2007)

das wird von einer anderen Klasse realisiert, mir gings aber nur um die Kommunikation der zwei geposteten Klassen.
anstatt dass das Tcp jetzt Einträge im iArr[100] verändert, möchte ich dasjetzt einmal mit einem Button machen -> wenn ich diesen Button drücke, dann wird der Eintrag in iArr verändert und der Schalter soll umschalten.

lg und danke 
Michl


----------



## Yzebär (13. Apr 2007)

Ich sage nur.... Observer-Pattern und zwar in beide Richtungen.

en.wikipedia.org/wiki/Observer_pattern
(die deutsche Übersetzung ist leider ziemlich sch....lecht)


----------



## L-ectron-X (13. Apr 2007)

OK, dann guck mal in die FAQ: http://www.java-forum.org/de/viewtopic.php?p=87333


----------



## MQue (13. Apr 2007)

Danke, ich werds mir mal anschauen!!

vielen dank

lg 
Michale


----------

