Site hosted by Angelfire.com: Build your free website today!

BMI Berechnung in Java, grafisch mit Verwendung der Swing Komponenten

 

Ausführung als Applet:

© 2004 Carsten Dräger

Quellcode, Ausführung als Application, auskommentiert:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
* Klasse BMIFrame die von der MainMethode aufgerufen wird
*
* @author Carsten Dräger
* @version 05,07,2004
*/
public class BMIFrame extends JFrame implements ActionListener,ChangeListener {

Container c; // Container dieses Frames
JLabel beschriftung, gewicht, alt, groes, gewanzeige, ageanz, heightanz, result, result2, result3; // Label, die im Frame erscheinen
JButton button; //der einzige Button
JSlider weight, age, height; //drei Slider
JRadioButton sex[] = new JRadioButton[2]; //zwei RadioButtons, durch ein Array differenziert
JPanel pan1, pan2, pan3, pan4, pan5; //Panels für geschachtelte Anordnung im GridLayout vom Container c
int geschl,alter,gew; //Integer für BMI Berechnung
float BMI, gros, groesse; //s.o.
String Klasse, Wunsch; //Strings für Ergebnis Ausgabe

/**
* Konstruktor von BMIFrame
*
*/
public BMIFrame() {
c = getContentPane(); //Container bekommt das ContentPane
c.setBackground(Color.white); //Hintergrundfarbe des Containers c
c.setLayout(new GridLayout(7,1)); //Layout des Containers c
pan1 = new JPanel(); //Panels für die Verschachtelung werden initialisiert
pan1.setLayout(new FlowLayout()); //die Layouts für die Panels werden gesetzt
pan2 = new JPanel();
pan2.setLayout(new FlowLayout(FlowLayout.LEFT,10,5));
pan3 = new JPanel();
pan3.setLayout(new FlowLayout(FlowLayout.LEFT,10,5));
pan4 = new JPanel();
pan4.setLayout(new FlowLayout(FlowLayout.LEFT,10,5));
pan5 = new JPanel();
pan5.setLayout(new FlowLayout());
pan1.setBackground(Color.white); //Hintergrundfarbe
pan2.setBackground(Color.white);
pan3.setBackground(Color.white);
pan4.setBackground(Color.white);
pan5.setBackground(Color.white);
beschriftung = new JLabel(" Dieses Programm berechnet den Body-Mass-Index (BMI)"); //Label wird initialisiert
beschriftung.setForeground(Color.blue); //Schriftfarbe des Labels
button = new JButton("Berechnung!"); //Button wird initialisiert
age = new JSlider(JSlider.HORIZONTAL,0,125,0); //Slider für Alter wird initialisiert
age.setPaintLabels(true);
age.setPaintTicks(true);
height = new JSlider(JSlider.HORIZONTAL,0,250,0); //Slider für Größe wird initialisiert
height.setPaintLabels(true);
height.setPaintTicks(true);
weight = new JSlider(JSlider.HORIZONTAL,0,300,0); //Slider für Gewicht wird initialisiert
weight.setPaintLabels(true);
weight.setPaintTicks(true);
weight.setBackground(Color.white); //Hintergrundfarbe
age.setBackground(Color.white); //Hintergrundfarbe
height.setBackground(Color.white); //Hintergrundfarbe
button.setBackground(Color.white); //Hintergrundfarbe
result = new JLabel("Bitte klicken Sie"); //Label wird initialisiert
result2 = new JLabel("zur Berechnung"); //Label wird initialisiert
result3 = new JLabel("auf untenstehenden Button!"); //Label wird initialisiert
result.setForeground(Color.red); //Schriftfarbe des Labels
result2.setForeground(Color.red); //Schriftfarbe des Labels
result3.setForeground(Color.red); //Schriftfarbe des Labels
gewicht = new JLabel("Bitte geben Sie Ihr Gewicht an:"); //Label wird initialisiert
alt = new JLabel("Bitte geben Sie Ihr Alter an:"); //Label wird initialisiert
groes = new JLabel("Bitte geben Sie Ihre Größe ein:"); //Label wird initialisiert
gewanzeige = new JLabel("0 kg"); //Label wird initialisiert
ageanz = new JLabel("0 Jahre"); //Label wird initialisiert
heightanz = new JLabel("0.0 cm"); //Label wird initialisiert
ButtonGroup bg = new ButtonGroup(); //Gruppe für RadioButtons wird initialisiert
sex[0] = new JRadioButton("männlich",true); //RadioButton wird intialisiert
sex[0].setBackground(Color.white);
sex[1] = new JRadioButton("weiblich",false); //RadioButton wird intialisiert
sex[1].setBackground(Color.white);
bg.add(sex[0]); //RadioButtons werden der ButtonGroup hinzugefügt
bg.add(sex[1]);
pan1.add(sex[0]); //Hier verteile ich meine Komponenten in den Panels
pan1.add(sex[1]);
pan2.add(gewicht);
pan2.add(weight);
pan2.add(gewanzeige);
pan3.add(groes);
pan3.add(height);
pan3.add(heightanz);
pan4.add(alt);
pan4.add(age);
pan4.add(ageanz);
pan5.add(result);
pan5.add(result2);
pan5.add(result3);
c.add(beschriftung); //Hier wiederum füge ich die Panels und Komponenten dem Container c zu
c.add(pan1);
c.add(pan2);
c.add(pan3);
c.add(pan4);
c.add(pan5);
c.add(button);
sex[0].addActionListener(this); //Hier werden die Event Empfängerklassen registriert
sex[1].addActionListener(this);
button.addActionListener(this);
age.addChangeListener(this);
height.addChangeListener(this);
weight.addChangeListener(this);
}

/**
* Methode die die Ereignisse des ChangeListeners übergeben bekommt
* und entsprechende Anweisungen ausführt
*
* @param event Das Ereignis der JSlider
*/
public void stateChanged(ChangeEvent event) {
JSlider s1 = (JSlider)event.getSource(); //s1 bekommt die Quelle des Events zugeordnet
if (s1 == weight) { //wenn die Quelle der Slider für Gewicht..
if ( !s1.getValueIsAdjusting() ) { //wenn nicht adjustiert wird
gew = (int) s1.getValue(); //bekommt gew den Wert des Sliders als Integer
gewanzeige.setText(String.valueOf(gew)+" kg"); //Die Anzeige für den Slider zeigt den gegenwärtigen Wert an
}
else { //sonst
gew = (int) s1.getValue(); //bekommt gew den Wert des Sliders als Integer
gewanzeige.setText(String.valueOf(gew)+" kg"); //Die Anzeige für den Slider zeigt den gegenwärtigen Wert an
}
}

if (s1 == age) { //wenn die Quelle der Slider für Alter..
if ( !s1.getValueIsAdjusting() ) { //wenn nicht adjustiert wird
alter = (int) s1.getValue(); //bekommt alter den Wert des Sliders als Integer
ageanz.setText(String.valueOf(alter)+" Jahre"); //Die Anzeige für den Slider zeigt den gegenwärtigen Wert an
}
else { //sonst
alter = (int) s1.getValue(); //bekommt alter den Wert des Sliders als Integer
ageanz.setText(String.valueOf(alter)+" Jahre"); //Die Anzeige für den Slider zeigt den gegenwärtigen Wert an
}
}

if (s1 == height) { //wenn die Quelle der Slider für Größe..
if ( !s1.getValueIsAdjusting() ) { //wenn nicht adjustiert wird
gros = (float) s1.getValue(); //bekommt gros den Wert des Sliders als Integer
heightanz.setText(String.valueOf(gros)+" cm"); //Die Anzeige für den Slider zeigt den gegenwärtigen Wert an
}
else { //sonst
gros = (float) s1.getValue(); //bekommt gros den Wert des Sliders als Integer
heightanz.setText(String.valueOf(gros)+" cm"); //Die Anzeige für den Slider zeigt den gegenwärtigen Wert an
}
}
}


/**
* Methode die die Ereignisse des ActionListeners übergeben bekommt
* und entsprechende Anweisungen ausführt
*
* @param event Das Ereignis
*/
public void actionPerformed (ActionEvent evt) {
Object no = evt.getSource(); //no bekommt die Quelle des Events zugeordnet
if (no == sex[0]) //wenn der Radiobutton..
geschl = 0; //geschl bekommt den Wert 0 (für die Berechnung des BMI)

if (no == sex[1]) //wenn der Radiobutton..
geschl = 1; //geschl bekommt den Wert 1 (für die Berechnung des BMI)

if (no == button) //wenn der Button
berechnen(); //die Methode berechnen() wird ausgeführt
}

/**
* Methode die den BMI berechnet
*
*/
public void berechnen() {
groesse = (gros / 100); //damit der BMI korrekt mit Meterangaben berechnet wird, wird die Größenangabe modifiziert
BMI = (gew / (groesse * groesse)); //eigentliche BMI Berechnung

if (BMI < (20-geschl)) //je nach Geschlecht und BMI bekommt der String Klasse die KLassifizierung
Klasse = " Untergewicht";
else
if (BMI <= (25-geschl))
Klasse = " Normalgewicht";
else
if (BMI <= 30)
Klasse = " Uebergewicht";
else
if (BMI <= 40)
Klasse = " Fettsucht (Adipositas)";
else
Klasse = " Massive Fettsucht!";

if (alter < 19) //Je nach Alter bekommt der String Wunsch den wünschenswerten BMI Bereich
Wunsch = " Keine Angabe -> zu jung";
else
if (alter <= 24)
Wunsch = " 19 - 24";
else
if (alter <= 34)
Wunsch = " 20 - 25";
else
if (alter <= 44)
Wunsch = " 21 - 26";
else
if (alter <= 54)
Wunsch = " 22 - 27";
else
if (alter <= 64)
Wunsch = " 23 - 28";
else
Wunsch = " 24-29";
Ausgabe(); //die Methode Ausgabe() wird aufgerufen
}

/**
* Methode Ausgabe um das Ergebnis der Berechnung
* in die Label im Container c im aktuellen Frame zu schreiben
*/
public void Ausgabe() {
result.setText("BMI: "+BMI); //BMI wird in das Label result geschrieben
pan5.add(result); //und dem entspr. Panel hinzugefügt
result2.setText(" Klassifizierung: "+Klasse); //Klassifizierung wird in das Label result2 geschrieben
pan5.add(result2); //und dem entspr. Panel hinzugefügt
result3.setText(" Wünschenswerter BMI: "+Wunsch); //Wünschenswerter BMI Bereich wird in das Label result3 geschrieben
pan5.add(result3); //und dem entspr. Panel hinzugefügt
}
}