Eingabe des Benutzers Verwenden

moment.a

Mitglied
Hallo alle zusammen!
Ich habe ein JFrame erstellt, in dem der Benutzer auswählen kann, was für eine Form er zeichnen möchte. Je nach Form kann er eben den Radius oder Länge/Breite angeben.
Mein Problem ist, dass ich es nicht schaffe, dass die Eingabe als Koordinate verwendet werden kann.
Das Programm wird gestartet aber es zeichnet einfach nichts und sobald ich den Knop "Zeichnen" drücke kommt eine Fehlermeldung:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
ich dachte dass ich vielleicht deswegen bei dem Befehl, bei dem ich die Eingabe hole und umwandle ein ".trim()" machen muss, damit er eben nicht leer ist, hat aber leider nicht funktioniert. Vielleicht könnt ihr mir ja helfen.

++ die Fehlermeldung kommt nur bei dem Kreis (bei dem die zweite Eingabe wegfällt und somit das Feld leer bleibt. Beim Viereck kommt keine Fehlermeldung, allerdings wird es einfach nicht gezeichnet

Java:
public double bt_zeichnen_ActionPerformed(ActionEvent evt) {
    if (button == false) {
      button = true;
    } // end of if
    repaint(); 

    double a = 1;
  
  
    a = Double.parseDouble(nf_1.getText().trim());
  
  
    if (cb_formen.getSelectedItem().equals("Kreis")){
      double b = 1;
      b = Double.parseDouble(nf_2.getText().trim());
      return b;    
    } // end of if
 
    return a;
  
   } // end of bt_zeichnen_ActionPerformed

  public void paint(Graphics g, double a, double b){
  
    super.paint(g);
  
    if (button) {
      if (cb_formen.getSelectedItem().equals("Kreis")) {
        g.drawOval(70, 320, (int)a, 10);
      } // end of if
      else {
        g.drawRect(70, 320, (int)a,(int) b);
      } // end of if-else       
 
    } // end of if
 

moment.a

Mitglied
Hoppala.. du hast recht! Die Fehlermeldung ist weg. Vielen Dank! Das habe ich wohl übersehen.
Hast du noch eine Idee woran es liegen könnte, das nicht gezeichnet wird?
 

Harry Kane

Top Contributor
Hast du noch eine Idee woran es liegen könnte, das nicht gezeichnet wird?
Sogar zwei:
1. Nach dem setzen der Werte muss die Komponente neu gezeichnet werden. Das passiert nicht automatisch! Weiter werde ich da aber nicht drauf eingehen, weil nicht klar ist, von wo die Methode bt_zeichnen_ActionPerformed aufgerufen wird und was mit dem return-Wert passiert.
2. Die Koordinaten an denen gezeichnet wird, liegen ausserhalb des Größenbereiches der Komponente. Welche Größe der Komponente zugewiesen wird, kann u.a. vom Layoutmanager abhängen. Um das zu prüfen, müsste man auch mehr Code sehen.
 

JStein52

Top Contributor
weil nicht klar ist, von wo die Methode bt_zeichnen_ActionPerformed aufgerufen wird
Eigentlich egal von wo sie aufgerufen wird ... was hast du damit vor ? du versuchst da zwei double-Werte einzulesen und gibst aber nur einen davon zurück. Ich vermute mal im Falle eines Rechtecks sollen a und b die Länge und die Breite sein und im Falle eines Kreises soll a der Radius sein ?
 

moment.a

Mitglied
Ich vermute mal im Falle eines Rechtecks sollen a und b die Länge und die Breite sein und im Falle eines Kreises soll a der Radius sein ?

ja genau das ist eigentlich mein Plan. Der Knopf selbst funktioniert auch, also wenn ich damit was visible machen will dann geht das auch.
 

moment.a

Mitglied
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 27.06.2017
  * @author
  */

public class Versuch1 extends JFrame{
  // Anfang Attribute
  private JComboBox<String> cb_formen = new JComboBox<String>();
  private DefaultComboBoxModel<String> cb_formenModel = new DefaultComboBoxModel<String>();
  private JLabel lb_form = new JLabel();
  private JLabel lb_1 = new JLabel();
  private JLabel lb_2 = new JLabel();
  private JNumberField nf_1 = new JNumberField();
  private JNumberField nf_2 = new JNumberField();
  private JButton bt_los = new JButton();
  private JButton bt_zeichnen = new JButton();
  private JFrame frame = new JFrame();
 
  private JLabel lBerechnungvonUmfangundFlacheninhalt = new JLabel();
 
  private boolean button;
 
  private JButton bt_ende = new JButton();
  private JButton bt_neu = new JButton();
  private JLabel lb_flaecheninhalt = new JLabel();
  private JLabel lb_umfang = new JLabel();
  private JNumberField nf_flaecheninhalt = new JNumberField();
  private JNumberField nf_umfang = new JNumberField();
  // Ende Attribute
 
  public Versuch1() {
    // Frame-Initialisierung
    super();
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 451;
    int frameHeight = 761;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setTitle("Versuch1");
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
       
                                            
    // Anfang Komponenten
   
    cb_formen.setModel(cb_formenModel);
    cb_formen.setBounds(240, 72, 150, 20);
    cb_formenModel.addElement("Kreis");
    cb_formenModel.addElement("Viereck");
    cp.add(cb_formen);
    lb_form.setBounds(8, 72, 214, 20);
    lb_form.setText("Welche Form möchtest du zeichnen?");
    cp.add(lb_form);
    lb_1.setBounds(8, 144, 110, 20);
    lb_1.setText("text");
    lb_1.setVisible(false);
    cp.add(lb_1);
    lb_2.setBounds(8, 176, 110, 20);
    lb_2.setText("text");
    lb_2.setVisible(false);
    cp.add(lb_2);
    nf_1.setBounds(200, 144, 75, 20);
    nf_1.setText("");
    nf_1.setVisible(false);
    cp.add(nf_1);
    nf_2.setBounds(200, 176, 75, 20);
    nf_2.setText("");
    nf_2.setVisible(false);
    cp.add(nf_2);
    bt_los.setBounds(144, 104, 75, 25);
    bt_los.setText("Los geht's!");
    bt_los.setMargin(new Insets(2, 2, 2, 2));
    bt_los.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        bt_los_ActionPerformed(evt);
      }
    });
    cp.add(bt_los);
    bt_zeichnen.setBounds(144, 208, 75, 25);
    bt_zeichnen.setText("Zeichne!");
    bt_zeichnen.setMargin(new Insets(2, 2, 2, 2));
    bt_zeichnen.setVisible(false);
    bt_zeichnen.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        bt_zeichnen_ActionPerformed(evt);
    }
    });
    cp.add(bt_zeichnen);
    lBerechnungvonUmfangundFlacheninhalt.setBounds(72, 24, 248, 20);
    lBerechnungvonUmfangundFlacheninhalt.setText("Berechnung von Umfang und Flächeninhalt ");
    cp.add(lBerechnungvonUmfangundFlacheninhalt);
   
    bt_ende.setBounds(256, 472, 131, 49);
    bt_ende.setText("Beenden");
    bt_ende.setMargin(new Insets(2, 2, 2, 2));
    bt_ende.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        bt_ende_ActionPerformed(evt);
      }
    });
    bt_ende.setVisible(false);
    cp.add(bt_ende);
    bt_neu.setBounds(64, 464, 107, 57);
    bt_neu.setText("Neue Form");
    bt_neu.setMargin(new Insets(2, 2, 2, 2));
    bt_neu.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        bt_neu_ActionPerformed(evt);
      }
    });
    bt_neu.setVisible(false);
    cp.add(bt_neu);
    lb_flaecheninhalt.setBounds(16, 368, 110, 20);
    lb_flaecheninhalt.setText("Flächeninhalt:");
    lb_flaecheninhalt.setVisible(false);
    cp.add(lb_flaecheninhalt);
    lb_umfang.setBounds(16, 416, 110, 20);
    lb_umfang.setText("Umfang:");
    lb_umfang.setVisible(false);
    cp.add(lb_umfang);
    nf_flaecheninhalt.setBounds(152, 368, 131, 28);
    nf_flaecheninhalt.setText("");
    nf_flaecheninhalt.setEditable(false);
    nf_flaecheninhalt.setVisible(false);
    cp.add(nf_flaecheninhalt);
    nf_umfang.setBounds(152, 408, 131, 28);
    nf_umfang.setText("");
    nf_umfang.setEditable(false);
    nf_umfang.setVisible(false);
    cp.add(nf_umfang);
    // Ende Komponenten
   
    setVisible(true);
    setResizable(false);
  } // end of public Versuch1
 
  // Anfang Methoden
 
  public static void main(String[] args) {
    new Versuch1();
  } // end of main
 
  public void bt_los_ActionPerformed(ActionEvent evt) {
    lb_2.setVisible(false);
    nf_2.setVisible(false);
    lb_1.setVisible(true);
    nf_1.setVisible(true);
    bt_zeichnen.setVisible(true);
   
    if (cb_formen.getSelectedItem().equals("Kreis")){
      lb_1.setText("Radius");
           
    } // end of if
    else {
      lb_2.setVisible(true);
      nf_2.setVisible(true);
      lb_1.setText("Höhe");
      lb_2.setText("Länge");
    } // end of if-else
  } // end of bt_los_ActionPerformed

 
  public double bt_zeichnen_ActionPerformed(ActionEvent evt) {
    if (button == false) {
      button = true;
    } // end of if
   
    repaint();  

    double a = 1;
    double b = 1;
    double flaeche;
    double umfang;
   
    a = Double.parseDouble(nf_1.getText()); 
   
    nf_flaecheninhalt.setVisible(true);
    lb_flaecheninhalt.setVisible(true);
    lb_umfang.setVisible(true);
    nf_umfang.setVisible(true);
    bt_neu.setVisible(true);
    bt_ende.setVisible(true);
   
    if (cb_formen.getSelectedItem().equals("Viereck")){
      flaeche = 5;     
      umfang = 10;
     
     
      b = Double.parseDouble(nf_2.getText());
      return b;     
    } // end of if
    else{
     
      //Flächeninhalt: p·r2
      //Umfang: 2·p·r
     
      flaeche = 10;
      umfang = 20;
     
      }
      nf_flaecheninhalt.setDouble(flaeche);
      nf_umfang.setDouble(umfang);
      return a;
         
   } // end of bt_zeichnen_ActionPerformed
  public int x = 70, y = 320, width = (int)a, height = (int)b;
  public void paint(Graphics g, double a, double b){
    super.paint(g);
  
    if (button) {
      if (cb_formen.getSelectedItem().equals("Kreis")) {
        g.drawOval(x, y, a, b);
      } // end of if
      else {
        g.drawRect(70, 320, (int)a,(int) b);
      } // end of if-else
    } // end of if     
    }
  
  public void bt_ende_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    System.exit(0);
  } // end of bt_ende_ActionPerformed

  public void bt_neu_ActionPerformed(ActionEvent evt) {
    nf_1.setText("");
    nf_2.setText("");
    nf_flaecheninhalt.setText("");
    nf_umfang.setText("");
    lb_flaecheninhalt.setVisible(false);
    nf_flaecheninhalt.setVisible(false);
    lb_umfang.setVisible(false);
    nf_umfang.setVisible(false);
    bt_neu.setVisible(false);
    bt_ende.setVisible(false);
    bt_zeichnen.setVisible(false);
    lb_2.setVisible(false);
    nf_2.setVisible(false);
    lb_1.setVisible(false);
    nf_1.setVisible(false);
   
   
   

  } // end of bt_neu_ActionPerformed

    // Ende Methoden
} // end of class Versuch1
 

Harry Kane

Top Contributor
Und wer soll nun deine paint-Methode aufrufen ?
Ups, das ist mir gar nicht aufgefallen, dass der TE die Signatur der paint-Methode geändert hat und damit nicht mehr paint von JFrame überschreibt (wobei das ableiten von JFrame und überschreiben der paint(Graphics) Methode ohnehin keine gute Idee darstellt).
Die bt_zeichnen_ActionPerformed Methode ist auch Quatsch. Sie bekommt einen Parameter den sie nicht verwendet, und sie gibt einen Wert zurück, der vom Aufrufer der Methode nicht verwendet wird.
@TE: hast du dir den Link zum Thema "Zeichnen in Swing", den ich in deinem früheren Beitrag gepostet habe, zumindest mal angeschaut?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Gonzalez Eingabe des Benutzers mittels readLine()-Methode. Klappt in meinem Beispiel nicht! Java Basics - Anfänger-Themen 7
J Eingabe des Benutzers speichern und überprüfen Java Basics - Anfänger-Themen 9
Torschti Eingabe von Dezimalzahlen (bis zu zwei Kommastellen) Java Basics - Anfänger-Themen 11
T User input in Verbindung mit ChronoUnit anpassen und falls falsche Eingabe getätigtwird Java Basics - Anfänger-Themen 7
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
T sortierung der eingabe nach größe Java Basics - Anfänger-Themen 5
Ostkreuz Int Scanner auf Enter Eingabe prüfen Java Basics - Anfänger-Themen 4
G Programm läuft durch, ohne Eingabe aus dem Chat abzuwarten Java Basics - Anfänger-Themen 4
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
M Dialogbox sofort neustarten, falls aktuelle Eingabe falsch Java Basics - Anfänger-Themen 11
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
S OOP Java Eingabe in verschiedene Datenbank Tabellen eintragen Java Basics - Anfänger-Themen 7
A Bei VierGewinnt Eingabe per Buchstabe (a,b,c...) Java Basics - Anfänger-Themen 2
java-starter Erste Schritte Eingabe in Char wert umwandeln Java Basics - Anfänger-Themen 7
Lion.King Subtraktion nach Eingabe im Terminal Java Basics - Anfänger-Themen 7
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
J Mein Programm läuft bei der ersten Eingabe nicht mehr weiter, woran liegt das? Java Basics - Anfänger-Themen 6
M Eingabe limit Java Basics - Anfänger-Themen 8
brypa Programm mit Eingabe Java Basics - Anfänger-Themen 129
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
D falsche eingabe erkennen Java Basics - Anfänger-Themen 2
H Eingabe tätigen bevor Graphics g Fenster öffnet Java Basics - Anfänger-Themen 5
H For-Schleife bis Index von Eingabe laufen lassen Java Basics - Anfänger-Themen 24
Hamudi Bachir 2D Array eingabe vom Benutzer Java Basics - Anfänger-Themen 31
S Warum erscheint bei mir "Hallo Welt" und nicht die aktuelle Eingabe? Java Basics - Anfänger-Themen 16
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
B Array bei jeder Eingabe um eins erweitern Java Basics - Anfänger-Themen 3
TimoN11 IntelliJ , Ausgabe von einem Quellcode in Eingabe eines Quellcodes Java Basics - Anfänger-Themen 1
M Nach einer erstmaligen Eingabe, eine zweite Eingabe nur noch gegen bestätigung möglich Java Basics - Anfänger-Themen 2
chocobear26 Interface JOptionPane - Dialog_Fenster zeigt immer vorherige Eingabe an. Java Basics - Anfänger-Themen 4
E JavaFX Taschenrechner Eingabe im Textfield beschränken Java Basics - Anfänger-Themen 2
M Regex nur Zahlen und Punkt zulassen, Keine Eingabe(Leeres TextFeld) nicht zulassen Java Basics - Anfänger-Themen 6
M JTextField nur Zahleneingaben zulassen, eingabe sperren Java Basics - Anfänger-Themen 24
E Timer trotz erwartender Eingabe durchlaufen lassen Java Basics - Anfänger-Themen 11
K falsche Eingabe abfangen Java Basics - Anfänger-Themen 8
N Eingabe erkennen, ob groß oder kleingeschrieben worden ist Java Basics - Anfänger-Themen 22
N Fehlerausgabe bei falscher Eingabe der Users Java Basics - Anfänger-Themen 3
N Eingabe des Users direkt hinter die Ausgabe Java Basics - Anfänger-Themen 3
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
O Mehrfache Scanner-Eingabe durch Komma getrennt Java Basics - Anfänger-Themen 6
M String array durch Eingabe begrenzen Java Basics - Anfänger-Themen 7
iman Eingabe von Benutzer Filter machen. Java Basics - Anfänger-Themen 7
M Input/Output JTextField Eingabe in String Variable speichern Java Basics - Anfänger-Themen 15
D Eingabe einscannen, ohne vorher einen Datentypen anzugeben? Java Basics - Anfänger-Themen 1
M Verschiedene Eingabe = Verschiedene Ausgaben Java Basics - Anfänger-Themen 5
H Eingabe Java Basics - Anfänger-Themen 7
F Bedingung für Eingabe Java Basics - Anfänger-Themen 2
K Durch eine Text eingabe etwas Ausführen Java Basics - Anfänger-Themen 5
Dimax Erste Schritte String Eingabe Prüfen Java Basics - Anfänger-Themen 11
R Eingabe String umwandeln zu Integer Werten Java Basics - Anfänger-Themen 8
B Türme von Hanoi mit einer beliebigen aber gültigen Eingabe lösen Java Basics - Anfänger-Themen 5
D While Schleife bei Bedarf durch Eingabe stoppen Java Basics - Anfänger-Themen 15
J Eingabe Einschränken Java Basics - Anfänger-Themen 1
Zrebna Compiler-Fehler Java-Compiler wird nach 'javac' keyword-Eingabe nicht gestartet (Erste Übung) Java Basics - Anfänger-Themen 18
A Datentypen Unterschiedliche Datentypen in einer Eingabe einlesen Java Basics - Anfänger-Themen 2
D Array via Eingabe befüllen Java Basics - Anfänger-Themen 6
M Wie kann ich eine Eingabe im Java-Swing übergeben? Java Basics - Anfänger-Themen 1
N Abbrechen einer Eingabe endet im Fehler Java Basics - Anfänger-Themen 3
S Konsolen eingabe Java Basics - Anfänger-Themen 17
M Scanner-Eingabe nach gewissem Zeitraum überprüfen Java Basics - Anfänger-Themen 2
x-tshainge Bei if (eingabe = = ... ) enter als eingabe nehemen Java Basics - Anfänger-Themen 4
S in ActionListener auf Eingabe aus anderem Frame warten Java Basics - Anfänger-Themen 2
S Eingabe in anderer Klasse verwenden Java Basics - Anfänger-Themen 3
T Input/Output Falsche Eingabe ausgeben Java Basics - Anfänger-Themen 3
R Ratespiel mit Return und einer Eingabe Java Basics - Anfänger-Themen 1
K Eingabe in Array speichern und Ausgeben Java Basics - Anfänger-Themen 9
J Eingabe des Scanners an einer bestimmten Position Java Basics - Anfänger-Themen 6
J Input/Output Den zweiten Output erst nach Eingabe ausgeben Java Basics - Anfänger-Themen 4
S Eingabe auf Richtigkeit und Reihenfolg überprüfen Java Basics - Anfänger-Themen 3
R Java CMD Eingabe verbergen Java Basics - Anfänger-Themen 4
L Eingabe überprüfen Java Basics - Anfänger-Themen 7
T Input/Output Int Eingabe auf Zahl überprüfen Java Basics - Anfänger-Themen 30
S Method mit Eingabe abrufen Java Basics - Anfänger-Themen 1
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
M Erste Schritte primzahlen ermitteln, nur zahlen als eingabe erlauben Java Basics - Anfänger-Themen 34
K Überprüfen ob Eingabe ein Float ist Java Basics - Anfänger-Themen 4
G Warum funktioniert das Programm für negative Eingabe nicht? Java Basics - Anfänger-Themen 3
O Erste Schritte Eingabe anweisungen eliminieren Java Basics - Anfänger-Themen 3
G Objekt Instanziierung von Eingabe abhängig machen Java Basics - Anfänger-Themen 5
E Wie Passwort-Eingabe (ohne Echo!) über Konsole ? Java Basics - Anfänger-Themen 4
B Interface JTextField Eingabe als String verwenden Java Basics - Anfänger-Themen 3
F Abfrage ob Eingabe eine Zahl ist Java Basics - Anfänger-Themen 3
H Alternative Eingabe Java Basics - Anfänger-Themen 3
L Bei falscher Eingabe soll NaN zurückgegeben werden, Rückgabetyp jedoch double Java Basics - Anfänger-Themen 3
J Methoden Eingabe Methode nur Buchstaben Java Basics - Anfänger-Themen 4
F Die Teilersumme einer Eingabe berechnen Java Basics - Anfänger-Themen 11
H Leere Eingabe in einem array Java Basics - Anfänger-Themen 11
K Input/Output Nullstring als Eingabe Java Basics - Anfänger-Themen 4
M Eingabe im Terminal nicht möglich Java Basics - Anfänger-Themen 20
D Anzahl von Zahlen bei eingabe begrenzen Java Basics - Anfänger-Themen 37
T Input/Output Double und String als Eingabe einlesen Java Basics - Anfänger-Themen 9
N Error bei eingabe eines Punktes Java Basics - Anfänger-Themen 1
M Messandwendung nach Zeit und eigener Eingabe Java Basics - Anfänger-Themen 4
B Problem beim Angeben einer Eingabe Java Basics - Anfänger-Themen 12
D Fehler bei String eingabe via Scanner Java Basics - Anfänger-Themen 6
V char Eingabe aber nur für Buchstaben Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben