TextFelder auslesen

Cyz44

Aktives Mitglied
Java:
  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.
 
Zuletzt bearbeitet von einem Moderator:
Die Methode hat void als Rückgabewert also nix.

Da wirste über Membervariablen gehen müssen.
 
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
 
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 😉).


Java:
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
 
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
 
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..
 
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
 
@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.
 
Java:
  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
 
@Final Striker

Java:
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
 
@Final Striker

Java:
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

Ja, du bringst was durcheinander. Dir fehlen anscheinend die absoluten Grundlagen über das Verwenden und Aufrufen von Methoden und die Parameterübergabe.
 
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).

Java:
  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
 
Du versuchst den String
Code:
"Xmin = "
in eine Zahl umzuwandeln und das funktioniert nicht, weil der Ausdruck keine Zahl ist.
 
Ach so, ich verstehe. Gibt es den einen bestimmten befehl, mit dem man nur einen teil eines textfields einlesen kann? Also
Code:
 Xmin(nur die eingegebene Zahl).getText()
so was in der Richtung?
 
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
 
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 Frage🙂D) : 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...
 
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
 
Yep, ein bzw mehrere textfields die auf einer textarea liegen.


Code:
    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.
Code:
  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.
 

Zurück
Oben