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
 
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?
 
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.
 
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 ?
 
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.
 
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
 
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?
 

Neue Themen


Zurück
Oben