# Listener, werte in andere Klasse übernehmen



## erdmulch (10. Feb 2011)

hallo zusammen,

ich habe ein kleine frage.
folgendes Problem: Ich habe ein JTextField in dem ich werte hineinschreiben kann. die werte werden auch übernommen und ich kann es an der konsole wieder ausgeben.
nun will ich den wert in eine andere Klasse übernehmen um ihn dort weiter verarbeiten zu können.

was mach ich falsch bzw. was fehlt.?

danke im voraus


```
public void focusLost(FocusEvent fe)
         {
          Object ob = fe.getSource();
          if (ob.equals(b.test()))
          {
        	  
        	  ergebnis = b.test().getText();
        	  System.out.println(ergebnis);
        	
          }
```


----------



## André Uhres (11. Feb 2011)

erdmulch hat gesagt.:


> was mach ich falsch bzw. was fehlt.?



Hallo erdmulch,

was funktioniert denn nicht?

Gruß,
André


----------



## jakob190590 (11. Feb 2011)

auf b.test().getText() kannst du doch auch außerhalb des Listeners zugreifen... oder wo ist b.test() denn definiert, und was ist das überhaupt?

Übrigens, der Ansatz mit
fe.getSource().equals(  <dein Textfeld??>  )
funktioniert zwar, aber ist nicht ganz richtig:
weil fe.getSource() ist ja der "Zeiger" auf dein Textfeld, und die Variable <dein Textfeld??> ist ebenfalls ein "Zeiger" auf das gleiche Textfeld, deswegen kannst du diese zwei Referenzen mit == vergleichen:

fe.getSource() == <dein Textfeld??>


----------



## erdmulch (12. Feb 2011)

ist es so schwierig eine variable von Klasse A nach Klasse B zu übernehmen?
warum kann mir nicht einer ein Beipsiel zeigen sodass es verständlich ist!!!!


----------



## jakob190590 (13. Feb 2011)

wir wissen nicht genau was du willst!


> ist es so schwierig eine variable von Klasse A nach Klasse B zu übernehmen?




```
B.setText(A.getText())
```
meinst du das?
drück dich mal genauer aus, wenn du was anderes meinst...


----------



## Firephoenix (13. Feb 2011)

Hi, hier ist das Zwergbeispiel:

*KlasseA (speichert die Variablen und stellt getter und setter dafür bereit)*


```
public class KlasseA {

	private int var1;
	private String var2;
	
	public KlasseA(int var1, String var2){
		this.var1 = var1;
		this.var2 = var2;
	}

	public int getVar1() {
		return var1;
	}

	public void setVar1(int var1) {
		this.var1 = var1;
	}

	public String getVar2() {
		return var2;
	}

	public void setVar2(String var2) {
		this.var2 = var2;
	}
	
}
```

*KlasseB (berechnet sinnloses Zeug)*


```
public class KlasseB {
	
	public int berechneIrgendwas(int x1){
		return x1 + 42;
	}
	
	public String gebeIrgendwasZurueck(String s){
		s = s.toUpperCase();
		s += " wird heute ganz groß geschrieben!";
		return s;
	}
}
```

*Main-Klasse(erzeugt Objekte von A und B und ruft Methoden auf)*

```
public class Main {
	
	
	public static void main(String[] args) {
		//Beide Klassen Instanzieren
		KlasseA kA = new KlasseA(3, "Hallo Welt!");
		KlasseB kB = new KlasseB();
		//Variable aus kA holen, in kB berechnen und wieder in kA ablegen
		kA.setVar1((kB.berechneIrgendwas(kA.getVar1())));
		//Wert aus kA ausgeben
		System.out.println(kA.getVar1());
		//Variable aus kA holen, in kB berechnen und ausgeben
		System.out.println((kB.berechneIrgendwas(kA.getVar1())));
		//Wert aus kA ausgeben
		System.out.println(kA.getVar1());
		//Sollte jetzt klar sein
		System.out.println(kB.gebeIrgendwasZurueck(kA.getVar2()));
	}
}
```

Tada, wir haben variablen aus A geholt, in B gesteckt, damit coole sachen gemacht und sie teilweise sogar wieder in A abgelegt 
Edit: Ob man das jetzt aus ner Main oder aus einem listener macht sollte sich vom grundschema ja nicht viel geben ^^

Gruß


----------



## erdmulch (13. Feb 2011)

Nun habe ich es kappiert!!!
Danke für die Kompetende Antwort.

kann mir jemand sagen wie ich den wert b.Beschreibung().getText() außerhalb des Listener in eine Variable übernehmen kann? 
mein Problem ist folgendes: ich hab ein JtextField in dem ich werte eintragen kann. nun hab ich ein Listener der die Werte auf der Console ausgibt. Das alles funktioniert soweit. nun will ich den wert inerhalb der Klasse weiterverarbeiten. kann mir jemand sagen wie das geht?

danke im voraus


```
public void focusLost(FocusEvent fe)
         {
          Object ob = fe.getSource();


          if (ob.equals(b.Beschreibung()))
          {


                  System.out.println(b.Beschreibung().getText());


          }

         }
```


----------



## moormaster (13. Feb 2011)

erdmulch hat gesagt.:


> Nun habe ich es kappiert!!!
> Danke für die Kompetende Antwort.
> 
> kann mir jemand sagen wie ich den wert b.Beschreibung().getText() außerhalb des Listener in eine Variable übernehmen kann?
> mein Problem ist folgendes: ich hab ein JtextField in dem ich werte eintragen kann. nun hab ich ein Listener der die Werte auf der Console ausgibt. Das alles funktioniert soweit. nun will ich den wert inerhalb der Klasse weiterverarbeiten. kann mir jemand sagen wie das geht?



Vielleicht solltest Du erstmal klarer formulieren, was Du mit "innerhalb einer anderen Klasse weiterverarbeiten" meinst. Klassen beschreiben in erster Linie Baupläne für Objekte. Werte kannst Du in Variablen von Objekten (a) speichern oder in statischen Variablen von Klassen (b).


```
public class Blume
 {
   static String wiese = "grüne Wiese";

   String farbe;

   public Blume(String farbe)
   {
    this.farbe = farbe;
   }

   public static void main(String[] args)
   {
    Blume b1 = new Blume("rot");
    Blume b2 = new Blume("weiss");

    // (a)
    b1.farbe = "blau";
    b2.farbe = "braun";

    // (b)
    Blume.wiese = "Fleischerwiese";
   }
 }
```

Für den Fall (a) benötigst Du die Variable, welche eine Referenz auf das Objekt speichert, was du verändern willst. In dem Beispiel wären das die Variablen b1 oder b2. Jedes Blumen-Objekt kann eine andere 'Farbe' speichern.

Statische Variablen im Fall (b) sind nicht an Objekte gebunden, sondern nur an die Klasse selbst. Um diese zu ändern, brauchst du keine Referenzen auf Objekte, sondern es reicht, den Klassennamen anzugeben.


Damit Dein Listener den Wert von b.Beschreibung().getText() in ein anderes Objekt speichern kann, muss dieser zunächst Zugriff auf die entsprechende Referenz haben. Die kannst Du dem Listener Objekt z.B. im Konstruktor vorher übergeben. Zum Beispiel:


```
class AndereKlasse
{
 String text;

 public AndereKlasse(String text)
 {
  this.text = text;
 }

 public String getText()
 {
  return text;
 }

 public void setText(String text)
 {
  this.text = text;
 }
}
```


```
class MyFocusListener implements FocusListener
{
 AndereKlasse ref;

 public MyFocusListener(AndereKlasse ref)
 {
  this.ref = ref;   // Referenz auf ein AndereKlasse-Object speichern
 }

 public void focusLost(FocusEvent e)
 {
  // verändern des in 'ref' gespeicherten Objekts

  ref.text = "?";
 }

 public void focusGained(FocusEvent e)
 {
 }
}
```


----------



## erdmulch (13. Feb 2011)

```
public void focusLost(FocusEvent fe)
         {
          Object ob = fe.getSource();
 
 
          if (ob.equals(b.Beschreibung()))
          {
 
 
                  System.out.println(b.Beschreibung().getText());
 
 
          }
 
         }

// Hier will ich "System.out.println(b.Beschreibung().getText());"  auf der Konsole ausgeben...wie funktioniert das....
```


----------



## moormaster (13. Feb 2011)

> // Hier will ich "System.out.println(b.Beschreibung().getText());"  auf der Konsole ausgeben...wie funktioniert das....



Was meinst Du mit "Hier"? In welcher Methode von welcher Klasse befindet sich "Hier"? In welcher Klasse befindet sich die focusLost-Methode? Wie sieht die "andere" Klasse aus, wo der Wert verwendet werden sollte und wo benutzt Du diese andere Klasse?


----------



## erdmulch (13. Feb 2011)

```
public class MyListener implements ActionListener, ItemListener, FocusListener
 {

            
       private String Beschreibung;

      
	public void focusLost(FocusEvent fe)
         {

          Object ob = fe.getSource();
          if (ob.equals(b.Beschreibung()))
          {
        	  Beschreibung = b.Beschreibung().getText();
              	  System.out.println(Beschreibung);  //Hier soll das "System.out.println(Beschreibung);" ausgeschnitten werden
        	
          }
        
         }
		
		
	//und hier soll es eingefügt bzw ausgegeben werden	

 }
```


----------



## moormaster (13. Feb 2011)

In diesem Bereich kann man nur Methoden oder Variablen deklarieren... Befehle kann man dort nicht unterbringen und es macht auch nicht wirklich viel Sinn, mitten in eine Klasse einen Ausgabebefehl zu schreiben, weil gar nicht klar ist, wann so ein Befehl ausgeführt werden sollte. Der Ausgabebefehl muss schon in einer Methode drinstehen.

Ich glaube es ist immernoch nicht so richtig klar, was Du eigentlich insgesamt vorhast ^^


----------

