# TextFelder auslesen



## Cyz44 (29. Apr 2012)

```
public void graph_ActionPerformed(ActionEvent evt)
  {
     zeichenFlaeche.setzeLinie(xges, 0, xges, 700);
  }

  public void windowset_ActionPerformed(ActionEvent evt)
  {
    String str1, str2, str3, str4, str5, str6;

    str1 = display1.getText();
    str2 = display1.getText();
    str3 = display1.getText();
    str4 = display1.getText();
    str5 = display1.getText();
    str6 = display1.getText();
    
    display1.setText(" Xmin = " + str1 + " \n Xmax = " + str2 + " \n Xscl = " + str3 + "\n Ymin = " + str4 + " \n Ymax = " + str5 + " \n Yscl = " + str6 );

    int a = Integer.parseInt(str1);
    int b = Integer.parseInt(str2);
    int c = Integer.parseInt(str3);
    int d = Integer.parseInt(str4);
    int e = Integer.parseInt(str5);
    int f = Integer.parseInt(str6);
    
    int breite = 700;
    int xges = (breite/(a+b)) * b ;
    return xges;

  }
```

ich will die zahl xges, welche ich ich der methode windowset berechnet habe, in der methode graph verwenden. Nur klappt das mit return iwie nicht.


----------



## Marcinek (29. Apr 2012)

Die Methode hat void als Rückgabewert also nix.

Da wirste über Membervariablen gehen müssen.


----------



## irgendjemand (30. Apr 2012)

mal ganz davon abgesehen das der caller eh nichts mit dem return anfangen kann ...
und da deine andere methode auch keinen entsprechende parameter hat wirst du wohl über ein instance-member gehen müssen .. wobei dann nur [c]xges=[/c] stehen bleibt ... ansonsten würdest du etwas anwenden was sich "shadowing" nennt ... was dann zu fehlern führen wird


----------



## Cyz44 (2. Mai 2012)

also ich werd nicht so recht schlau. ich möchte ja die berechnung ausführen, wenn windowset() aktiv wird, und dann wenn graph() aktiv wird soll es das ergebniss der berechnung erhalten (ich hoffe das ist einigermasen verständlich ).



```
public void achsen(int a, int b)
  {
    int breite = 700;
    int xges = (breite/(a+b)) * a;
    zeichenFlaeche.setzeLinie(xges, 0, xges, 700);


  }
  public void graph_ActionPerformed(ActionEvent evt)
  {
     int i = achsen();


  }

  public void windowset_ActionPerformed(ActionEvent evt)
  {
    String str1, str2, str3, str4, str5, str6;

    str1 = display1.getText();
    str2 = display1.getText();
    str3 = display1.getText();
    str4 = display1.getText();
    str5 = display1.getText();
    str6 = display1.getText();
    
    display1.setText(" Xmin = " + str1 + " \n Xmax = " + str2 + " \n Xscl = " + str3 + "\n Ymin = " + str4 + " \n Ymax = " + str5 + " \n Yscl = " + str6 );

    int a = Integer.parseInt(str1);
    int b = Integer.parseInt(str2);
    int c = Integer.parseInt(str3);
    int d = Integer.parseInt(str4);
    int e = Integer.parseInt(str5);
    int f = Integer.parseInt(str6);


  }
```

so klappts auch nicht, iwie auch logisch weil graph() ja a und b nicht kennt... trotzdem, mir fällt kein anderer lösungsansatz ein, das mit den membervariablenverstehe ich nicht so ganz. könntet ihr mal ein beispiel dafür geben? wäre euch sehr dankbar


----------



## Blackhole16 (2. Mai 2012)

du nimmst int-variablen, die nur in der ActionPerformed drin sind. Diese musst du einfach am anfang der klasse deklarieren und dann diese ändern. Diese kannst du dann auch von überal aufrufen.

btw: du rufst achsen() ohne Parameter auf, womit a und b auch nicht übergeben wrden. 

mfg
BH16


----------



## Cyz44 (2. Mai 2012)

super es kommt keine fehlermeldung mehr! 

aber jetzt taucht ein neues problem auf: wenn ich bei windowset jetzt die ersten beiden zahlen eingebe und dann auf graph klicke passiert... nichts! hängt das mit dem zusammen, was in windowset steht? Ich hab das gefühl die zahlen, die der benutzer eingeben soll werden nicht richtig eingelesen vom programm..


----------



## SlaterB (2. Mai 2012)

wenn du nicht bis in alle Ewigkeit nur Gefühle, sondern auch Wissen haben willst, dann schaue nach!, 
logge oder debugge, ob die Methode aufgerufen wird, welche Strings ausgelesen werden,
ob die int-Variablen Werte bekommen, 
ob in display1 der Text geändert wird und was immer noch interessant wird,

je nach Ausgaben oder auch keine Ausgaben (die auf Abbruch durch Exception deuten) kann man dann weiter überlegen


----------



## Final_Striker (2. Mai 2012)

> hängt das mit dem zusammen, was in windowset steht?


Ja.



> Ich hab das gefühl die zahlen, die der benutzer eingeben soll werden nicht richtig eingelesen vom programm..


Das kann dir wohl keiner sagen, zumindest machst du aber nichts mit den Eingaben.


----------



## Cyz44 (2. Mai 2012)

@SlaterB wo soll ich den nachschauen?

@Final_Striker Doch mit den eingaben mache ich schon etwas, ich übergebe sie an achsen() und rechne dort mit ihnen.


----------



## Final_Striker (2. Mai 2012)

Cyz44 hat gesagt.:


> Doch mit den eingaben mache ich schon etwas, ich übergebe sie an achsen() und rechne dort mit ihnen.



Aha, und wo findet diese "Übergabe" deiner Meinung denn statt?


----------



## SlaterB (2. Mai 2012)

```
public void windowset_ActionPerformed(ActionEvent evt)
  {
    String str1, str2, str3, str4, str5, str6;

    str1 = display1.getText();
    System.out.println("str1 ist: "+str1);
    // usw.
  }
```
das ist Nachschauen, natürlich möglichst intelligent, nicht jede Variable einzeln
(besser auch das Szenario erstmal nur mit EINEM Textfeld testen..)

gewisses Denken gehört auch immer dazu, wenn die Ausgabe gar nicht kommt wird die Methode 
nie aufgerufen oder durch Exception abgebrochen usw.,
aber Ausgaben sind nicht nur das A und O, sondern mindestens auch das E, I, U und eigentlich auch alle Konsonanten in der Programmierung


----------



## Cyz44 (2. Mai 2012)

@Final Striker


```
public void achsen(int a, int b)
```

die parameter der methode erhalten doch die werte der variablen, oder bringe ich da was total durcheinander? ???:L


----------



## Cyz44 (2. Mai 2012)

@SlaterB   

Ach so meintest du das, ok, gute idee (hätte ich selber drauf kommen müssen)


----------



## Final_Striker (2. Mai 2012)

Cyz44 hat gesagt.:


> @Final Striker
> 
> 
> ```
> ...



Ja, du bringst was durcheinander. Dir fehlen anscheinend die absoluten Grundlagen über das Verwenden und Aufrufen von Methoden und die Parameterübergabe.


----------



## Cyz44 (3. Mai 2012)

So habs jetzt mal bisschen anders versucht: Ein Textfield namens "Xmin" welches die zahl einliest und in ein int umgewandelt wird, naja und so weiter (muss ich euch wohl nicht erklären). Das Programm wird auch fehlerfrei compiliert und ausgeführt, aber wenn ich nun auf den button graph klicke, passiert nichts und es kommen tausend Fehlermeldungen:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input String: "Xmin = "
at java.lang.NumberFormatException.forInputString<Unknown Source>
at javax.Swing....

und in dem Stil immer so weiter. Bin echt verzweifelt weil der Code selber scheint ja zu stimmen (keine Fehlermeldung beim compilieren). 


```
public int achsen()
  {
    String str;
    str = Xmin.getText();
    int a = Integer.parseInt(str);
    return a;
  }

  public void graph_ActionPerformed(ActionEvent evt)
  {
    int i = achsen();
    zeichenFlaeche.setzeLinie(i, 0, i, 700);
  }
```

weiß da jemand Rat?

lg


----------



## Final_Striker (4. Mai 2012)

Du versuchst den String 
	
	
	
	





```
"Xmin = "
```
 in eine Zahl umzuwandeln und das funktioniert nicht, weil der Ausdruck keine Zahl ist.


----------



## Cyz44 (4. Mai 2012)

Ach so, ich verstehe. Gibt es den einen bestimmten befehl, mit dem man nur einen teil eines textfields einlesen kann? Also 
	
	
	
	





```
Xmin(nur die eingegebene Zahl).getText()
```
 so was in der Richtung?


----------



## SlaterB (4. Mai 2012)

verwegene Annahme,
nein, das TextFeld kannst du mit so einer Geschichte nicht nerven, 
getText() liefert den Inhalt als String und fertig

danach den String aufzutrennen ist wohl eine Aufgabe, split, indexOf, subString usw., aber ohne Beteiligung des TextFelds


----------



## Cyz44 (4. Mai 2012)

Yuhuu es klappt! Habs mit split gemacht, ist einfacher als ich dachte aber man muss sich halt in alles reinarbeiten, wenn man es vorher noch nie gemacht hat 

Jetzt hätte ich noch eine letzte FrageD) : Das Textfield ist einfach lose auf meinem panel platziert, es soll aber auf einer textarea liegen und dann erscheint zwar auch der vorgegebene text "xmin =" aber man kann keine zahl dahinter eingeben...


----------



## SlaterB (4. Mai 2012)

in oder auf eine TextArea kann gar nichts, außer Text zum Tippen,
was hast du denn konkret, wirklich eine Kombination von zwei Komponenten?
bisschen Code vielleicht


----------



## Cyz44 (4. Mai 2012)

Yep, ein bzw mehrere textfields die auf einer textarea liegen.



```
display1ScrollPane.setBounds(104, 32, 280, 120);
    cp.add(display1ScrollPane);

    Xmin.setBounds(104, 32, 65, 20);
    cp.add(Xmin);
    Xmax.setBounds(104, 52, 65, 20);
    cp.add(Xmax);
    Xscl.setBounds(104, 72, 65, 20);
    cp.add(Xscl);
    Ymin.setBounds(104, 92, 65, 20);
    cp.add(Ymin);
    Ymax.setBounds(104, 112, 65, 20);
    cp.add(Ymax);
    Yscl.setBounds(104, 132, 65, 20);
    cp.add(Yscl);
```

Und dann das einlesen einer zahl, die in graph_...() verwendet wird, später dann für jedes einzenle textfeld. 

```
public int achsen()
  {
    int breite = 700;
    String str = Xmin.getText();
    String[] bb = str.split("=");
    int a = Integer.parseInt(bb[1]);
    return a;

  }

  public void graph_ActionPerformed(ActionEvent evt)
  {
    int i = achsen();
    zeichenFlaeche.setzeLinie(i, 0, i, 700);
  }
```

Die Textarea brauche ich , um voher schon einfache rechnungen dort ausführen zu lassen (stellt den display des taschenrechners dar) und die textfields um eben später die zahlen einzulesen für die erstellung des Koordinatensystems.


----------

