# BMI Rechner mit eclipse Visual Editor (Seperates Fenster)



## Schoofmelker (11. Apr 2015)

Huhu bin neu hier und hätte mal ne Frage,

Also wir sollen von der Schule aus einen BMI-Rechner programmieren.
Ich hau euch mal den Quelltext hierein, kann es nicht so gut erklären. 


```
package paket_bmi;

import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.Dimension;
import javax.swing.JButton;
import java.awt.Rectangle;
import javax.swing.JEditorPane;
import javax.swing.JTextPane;

public class Hauptfenster extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel jContentPane = null;
    private JButton jButtonberechnen = null;
    private JButton jButtonreset = null;
    private JTextPane jTextPanegewichttextfeld = null;
    private JTextPane jTextPanegroeßetextfeld = null;
    private JTextPane jTextPaneBMITexteingabe = null;
    private JTextField gewicht = null;
    private JTextField groeße = null;
    private JTextField bmi = null;
    
    
    public Hauptfenster() {
        super();
        initialize();
    }


     
    private void initialize() {
        this.setSize(458, 267);
        this.setContentPane(getJContentPane());
        this.setTitle("JFrame");
    }

   
    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(null);
            jContentPane.add(getJButtonberechnen(), null);
            jContentPane.add(getJButtonreset(), null);
            jContentPane.add(getJTextPanegewichttextfeld(), null);
            jContentPane.add(getJTextPanegroeßetextfeld(), null);
            jContentPane.add(getJTextPaneBMITexteingabe(), null);
            jContentPane.add(getGewicht(), null);
            jContentPane.add(getGroeße(), null);
            jContentPane.add(getBmi(), null);
        }
        return jContentPane;
    }

    /**
     * This method initializes jButtonberechnen    
     *     
     * @return javax.swing.JButton    
     */
    private JButton getJButtonberechnen() {
        if (jButtonberechnen == null) {
            jButtonberechnen = new JButton();
            jButtonberechnen.setBounds(new Rectangle(45, 135, 155, 44));
            jButtonberechnen.setText("BMI Berechnen");
            jButtonberechnen.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    
                    double masse = Double.parseDouble(gewicht.getText());
                    double groesse = Double.parseDouble(groeße.getText());
                    double bmi = masse / (groesse* groesse);
                    
                    
                    
                }
            });
        }
        return jButtonberechnen;
    }

    
    private JButton getJButtonreset() {
        if (jButtonreset == null) {
            jButtonreset = new JButton();
            jButtonreset.setBounds(new Rectangle(240, 132, 171, 46));
            jButtonreset.setText("Daten Zurücksetzen");
            jButtonreset.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    
                    
                }
            });
        }
        return jButtonreset;
    }

    /**
     * This method initializes jTextPanegewichttextfeld    
     *     
     * @return javax.swing.JTextPane    
     */
    private JTextPane getJTextPanegewichttextfeld() {
        if (jTextPanegewichttextfeld == null) {
            jTextPanegewichttextfeld = new JTextPane();
            jTextPanegewichttextfeld.setBounds(new Rectangle(45, 48, 181, 22));
            jTextPanegewichttextfeld.setText("Bitte Gewicht eingeben:");
        }
        return jTextPanegewichttextfeld;
    }

    /**
     * This method initializes jTextPanegroeßetextfeld    
     *     
     * @return javax.swing.JTextPane    
     */
    private JTextPane getJTextPanegroeßetextfeld() {
        if (jTextPanegroeßetextfeld == null) {
            jTextPanegroeßetextfeld = new JTextPane();
            jTextPanegroeßetextfeld.setBounds(new Rectangle(45, 90, 181, 22));
            jTextPanegroeßetextfeld.setText("Bitte Ihre Körpergröße in cm eingeben");
        }
        return jTextPanegroeßetextfeld;
    }

    /**
     * This method initializes jTextPaneBMITexteingabe    
     *     
     * @return javax.swing.JTextPane    
     */
    private JTextPane getJTextPaneBMITexteingabe() {
        if (jTextPaneBMITexteingabe == null) {
            jTextPaneBMITexteingabe = new JTextPane();
            jTextPaneBMITexteingabe.setBounds(new Rectangle(105, 195, 91, 22));
            jTextPaneBMITexteingabe.setText("Ihr BMI beträgt :");
        }
        return jTextPaneBMITexteingabe;
    }

    /**
     * This method initializes gewicht    
     *     
     * @return javax.swing.JTextField    
     */
    private JTextField getGewicht() {
        if (gewicht == null) {
            gewicht = new JTextField();
            gewicht.setBounds(new Rectangle(286, 51, 93, 20));
        }
        return gewicht;
    }

    /**
     * This method initializes groeße    
     *     
     * @return javax.swing.JTextField    
     */
    private JTextField getGroeße() {
        if (groeße == null) {
            groeße = new JTextField();
            groeße.setBounds(new Rectangle(283, 90, 95, 20));
        }
        return groeße;
    }

    /**
     * This method initializes bmi    
     *     
     * @return javax.swing.JTextField    
     */
    private JTextField getBmi() {
        if (bmi == null) {
            bmi = new JTextField();
            bmi.setBounds(new Rectangle(293, 200, 78, 20));
        }
        return bmi;
    }

}
```


Meine Frage, ist nun da ich 2 Textfelder gemacht hab die auch von String zu double umgewandelt hab, kann ich den BMI im Fenster direkt anzeigen lassen.Wie krieg ich den berechneten Wert in das Textfeld bmi. Also nachdem ich den Startbotton in eclipse gedrückt habe. 

Würde mich sehr sehr bedanken für die passende Antwort

Grüße Timo


----------



## AntiMuffin (11. Apr 2015)

Was meinst du damit "nachdem ich den Startbutton in eclipse  gedrückt  habe"?
Versteh ich das Richtig:
1. Du Startest das Programm .
2. Der User gibt Größe und Gewicht  ein.
3. Der bmi wird daraus  berechnet  und angezeigt 

Wenn nicht dann bitte den Programmablauf erklären.

Mit freundlichen Grüßen, 
AntiMuffin


----------



## Schoofmelker (11. Apr 2015)

Also, ich starte das Programm in eclipse. der grüne botton mit dem Pfeil drauf. Dann muss man in dem Fenster, dass nun erscheint größe und Gewicht eingeben. Dann soll man auf den Botton BMI berechnen drücken, der bmi soll dan ausgerechnet und in dem Textfeld bmi angezeigt werden.

Grüße


----------



## AntiMuffin (11. Apr 2015)

Na dann musst du bei actionPerformed() von dem Button zunächst die Werte der beiden Textfelder auslesen und danach in das dritte eintragen.

Ungefähr  so:
///Hab schon ewig kein swing mehr gemacht, evtl heißen die Methoden auch anders :bahnhof:

```
public void actionPerformed(java.awt.event.ActionEvent e) {
         double groesse = Double.parseDouble (getGroeße().getText ()); // Kein ß benutzen !
         double gewicht = Double.parseDouble (getGewicht().getText ());
         double bmi = 0;
         // berechnen 
         getBmi().setText (Double.toString (bmi));
         
}
```


----------



## Schoofmelker (11. Apr 2015)

oh ja danke funktioniert . Kann ich das auch noch irgendwie runden, d.h. dass nur 1ne nachkomma ziffer zu erkennen ist.
und wenn ich auf den resetbotton klicke sollen die Daten reseted werden, wie geht das ? 
Sry hab wirklich nicht alzu große Ahnung von dem 

Danke und Grüße


----------



## AntiMuffin (11. Apr 2015)

Ja kannst du mithilfe von String.format("%.1f", Double.toString (bmi)); - Naja du hast den ResetButton und machst dort bei actionPerformed() einfach getGroeße().setText (""); und für die anderen Textfelder das gleiche  

Gruß,
AntiMuffin


----------



## Schoofmelker (11. Apr 2015)

okay das mit dem Reset button hat funktioniert , so jetzt habe ich noch ne letzte Experten frage. Also ich will, dass ich erst wenn ich meine Gewicht und Größe eingegeben habe, dass dann erst der Botton BMI berechnen kommt. Und erst wenn ich den gedrückt habe soll dann mein BMI kommen 

Hoffe du bekommst das noch hin aber wenn nicht ist das auch nicht schlimm 

Grüße


----------



## AntiMuffin (11. Apr 2015)

Dafür musst du nur prüfen ob in den Textfeldern etwas steht: 

Dafür hätte ich eine extra Methode macht die schaut ob der Button enabled oder disabled werden muss. Diese Methode soll dann immer aufgerufen werden, wenn sich der Text im Textfeld ändert.

```
private JTextField getGroeße() {
if (groeße == null) {
groeße = new JTextField();
groeße.setBounds(new Rectangle(283, 90, 95, 20));
groeße.getDocument().addDocumentListener(new DocumentListener() {
    pruefeButton();
});}
return groeße;
}
private JTextField getGewicht() {
if (gewicht == null) {
gewicht = new JTextField();
gewicht.setBounds(new Rectangle(286, 51, 93, 20));
gewicht.getDocument().addDocumentListener(new DocumentListener() {
    pruefeButton();
});}
}
return gewicht;
}

private void pruefeButton (){
      getJButtonberechnen().setEnabled( getGroeße().getText().length > 0 &&            getGewicht().getText().length > 0);
}
```


----------

