BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten

Nenad2001

Mitglied
Java:
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JProgressBar;
import javax.swing.JToggleButton;
import javax.swing.JRadioButton;
import javax.swing.JTextPane;
import java.awt.Color;
import java.awt.Panel;
import javax.swing.JList;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;

public class BMI_Rechner extends JFrame {

private     JPanel contentPane;
private     JTextField fieldalter;
private     JTextField körpergrösefield;
private     JTextField gewicht_field;
protected String textfromgewichtfieldmännlich;
private JTextField BMI_ERGEBNIS;
private JTextField Skala;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    BMI_Rechner frame = new BMI_Rechner();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public BMI_Rechner() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 677, 417);
       
        this.setResizable(false);
        this.getContentPane().setBackground(Color.DARK_GRAY);
       
        JMenuBar Menubar = new JMenuBar();
        setJMenuBar(Menubar);
       
        JMenu Hilfe = new JMenu("Hilfe");
        Menubar.add(Hilfe);
       
       
       
   
       
       
        JMenuItem Erklärungsitem = new JMenuItem("Erklärung");
        Hilfe.add(Erklärungsitem);
       
        JMenu Statistik = new JMenu("Statistik");
        Menubar.add(Statistik);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

        setContentPane(contentPane);
        contentPane.setLayout(null);
       
        JLabel Label_bmi = new JLabel("BMI-Rechner");
        Label_bmi.setBounds(589, 357, 163, 25);
        contentPane.add(Label_bmi);
       
        fieldalter = new JTextField();
        fieldalter.setFont(new Font("Arial", Font.BOLD, 23));
        fieldalter.setBounds(10, 104, 120, 20);
        contentPane.add(fieldalter);
        fieldalter.setColumns(10);
       
        JLabel Alter_Label = new JLabel("Allter");
        Alter_Label.setBounds(153, 107, 48, 14);
        contentPane.add(Alter_Label);
       
        körpergrösefield = new JTextField();
        körpergrösefield.setBounds(10, 158, 120, 20);
        körpergrösefield.setFont(new Font("Arial", Font.BOLD, 23));
        contentPane.add(körpergrösefield);
        körpergrösefield.setColumns(10);
       
        JLabel Körpergröße_label = new JLabel("Körpergröße in M");
        Körpergröße_label.setBounds(149, 161, 200, 14);
        contentPane.add(Körpergröße_label);
       
        gewicht_field = new JTextField();
        gewicht_field.setBounds(10, 219, 120, 20);
        gewicht_field.setFont(new Font("Arial", Font.BOLD, 23));
        contentPane.add(gewicht_field);
        gewicht_field.setColumns(10);
       
        JLabel lblGewichtInKg = new JLabel("Gewicht in Kg");
        lblGewichtInKg.setBounds(149, 222, 100, 14);
        contentPane.add(lblGewichtInKg);
       
       
        Skala = new JTextField();
        Skala.setBounds(322, 162, 274, 20);
        contentPane.add(Skala);
        Skala.setColumns(10);
        Skala.setEditable(false);
       
        BMI_ERGEBNIS = new JTextField();
        BMI_ERGEBNIS.setBounds(322, 86, 274, 50);
        contentPane.add(BMI_ERGEBNIS);
        BMI_ERGEBNIS.setColumns(10);
        BMI_ERGEBNIS.setEditable(false);
       
        this.setTitle("BMI-Rechner");
        this.setLocationRelativeTo(null);
   
        JRadioButton weiblich = new JRadioButton("Weiblich");
       
        weiblich.setBounds(99, 47, 109, 23);
        contentPane.add(weiblich);
        JRadioButton männlich = new JRadioButton("Männlich");
        männlich.setBounds(10, 47, 109, 23);
        contentPane.add(männlich);
       
       
        JButton ClearButton = new JButton("Clear");
        ClearButton.setBounds(10, 270, 89, 23);
        contentPane.add(ClearButton);
       
       
        ImageIcon image = new ImageIcon("bmi-rechner.jpg");
         this.setIconImage(image.getImage());

            JProgressBar bar = new JProgressBar();
            bar.setBounds(322, 215, 274, 7);
            contentPane.add(bar);
       
       
       
       
       
       
         Erklärungsitem.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
            if(e.getSource() == Erklärungsitem) {
            new Erklärungsitem();
           
            }
               
            }
           
           
           
           
           
           
           
        });
       
       
       
       
       
       
       
       
        JButton BMI_berechnen = new JButton("BMI Berechnen");
        BMI_berechnen.setBounds(275, 297, 150, 23);
        BMI_berechnen.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
           
                try {
                if(männlich.isSelected()) {
               
                   
               
                String textfromfieldaltermännlich = fieldalter.getText();
                int alter_männlich = Integer.parseInt(textfromfieldaltermännlich); //Alter
               
                String textfromfieldgrößemännlich = körpergrösefield.getText();
                double körpergröße_männlich = Double.parseDouble(textfromfieldgrößemännlich);
               
                String textfromgewichtfieldmännlich = gewicht_field.getText();
                int gewicht_männlich = Integer.parseInt(textfromgewichtfieldmännlich);  // Gewicht
               
                double BMI_Männlich = gewicht_männlich / (körpergröße_männlich * körpergröße_männlich);
               
               
               
                BMI_Männlich = Math.round(BMI_Männlich * 100.0) / 100.0;
             
               
                BMI_ERGEBNIS.setText(String.valueOf("Ihr BMI Beträgt " + BMI_Männlich));
                BMI_ERGEBNIS.setFont(new Font("Arial", Font.BOLD, 23));
             
                ClearButton.addActionListener(new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        if(e.getSource() == ClearButton);
                        fieldalter.setText("");
                        körpergrösefield.setText("");
                        gewicht_field.setText("");
                         BMI_ERGEBNIS.setText("");
                         Skala.setText("");
                         bar.setBackground(Color.WHITE);
                                   
                   
                       
                    }
                   
                   
                   
                   
                   
                   
                });
                 
                   if (alter_männlich >= 19 && alter_männlich <= 24 && BMI_Männlich <19){
                   Skala.setText(String.valueOf("Sie haben untergewicht für ihr Alter"));
                   Skala.setFont(new Font("Arial", Font.BOLD, 15));
                   bar.setBackground(Color.red);
                   } else if (alter_männlich >= 19 && alter_männlich <= 24 && BMI_Männlich >=19 && BMI_Männlich <=25) {
                    Skala.setText(String.valueOf("Sehr gut Du hast Normalgewicht"));  
                    bar.setBackground(Color.GREEN);
                   } else if (alter_männlich >= 19 && alter_männlich <= 24 && BMI_Männlich >=25 && BMI_Männlich <=30) {
                     Skala.setText(String.valueOf("Du hast Übergewicht"));
                     bar.setBackground(Color.ORANGE);
                     
                   } else if (alter_männlich >= 19 && alter_männlich <= 24 && BMI_Männlich >=30 && BMI_Männlich <=40) {
                      Skala.setText(String.valueOf("Du hast Adipositas"));
                      bar.setBackground(Color.RED);
                   } else if (alter_männlich >= 19 && alter_männlich <= 24 && BMI_Männlich >=40) {
                     Skala.setText(String.valueOf("Du hast starke Adipositas"));
                     bar.setBackground(Color.RED);
                   }
                 
               
                 
                 
                 
                 
                 
                   if (alter_männlich >= 25 && alter_männlich <= 34 && BMI_Männlich <20) {
                    Skala.setText(String.valueOf("Du hast untergewicht"));
                    bar.setBackground(Color.RED);
                   }   else if (alter_männlich >= 25 && alter_männlich <= 34 && BMI_Männlich >=20 && BMI_Männlich <=26) {
                       Skala.setText(String.valueOf("Du hast normal Gewicht"));
                       bar.setBackground(Color.GREEN);
                   }  else if (alter_männlich >= 25 && alter_männlich <= 34 && BMI_Männlich >=26 && BMI_Männlich <=31) {
                       Skala.setText(String.valueOf("Du hast leicht Übergewicht" ));
                       bar.setBackground(Color.ORANGE);
                   }else if (alter_männlich >= 25 && alter_männlich <= 34 && BMI_Männlich >=31 && BMI_Männlich <=41) {
                       Skala.setText(String.valueOf("Du hast Adipositas"));
                       bar.setBackground(Color.red);
                   } else if (alter_männlich >= 25 && alter_männlich <= 34 && BMI_Männlich >=41) {
                      Skala.setText(String.valueOf("Du hast Starke Adipositas"));
                      bar.setBackground(Color.RED);
                   }
                 
             

                       if (alter_männlich >= 35 && alter_männlich <= 44 && BMI_Männlich <=21) {
                       Skala.setText(String.valueOf("Du hast Untergewicht für dein Alter"));
                       bar.setBackground(Color.RED);
                     
                   }   else if (alter_männlich >= 35 && alter_männlich <= 44 && BMI_Männlich >=21 && BMI_Männlich <= 27) {
                       Skala.setText(String.valueOf("Du hast normal Gewicht"));
                       bar.setBackground(Color.GREEN);
                   }  else if (alter_männlich >= 35 && alter_männlich <= 44 && BMI_Männlich >=27 && BMI_Männlich <= 32) {
                       Skala.setText(String.valueOf("Du hast Übergewicht"));
                       bar.setBackground(Color.ORANGE);
                   }
                    else if (alter_männlich >= 35 && alter_männlich <= 44 && BMI_Männlich >=32 && BMI_Männlich <= 42) {
                       Skala.setText(String.valueOf("Du hast Adipositas"));
                       bar.setBackground(Color.RED);
                   }  else if (alter_männlich >= 35 && alter_männlich <= 44 && BMI_Männlich >=42) {
                       Skala.setText(String.valueOf("Starke Adipositas"));
                       bar.setBackground(Color.RED);
                   }
               
               

                       if (alter_männlich >= 45 && alter_männlich <= 54 && BMI_Männlich <=22) {
                       Skala.setText(String.valueOf("Du hast untergewicht"));
                       bar.setBackground(Color.RED);
                   }       else if (alter_männlich >= 45 && alter_männlich <= 54 && BMI_Männlich >=22 && BMI_Männlich <= 28) {
                       Skala.setText(String.valueOf("Du hast normal Gewicht"));
                       bar.setBackground(Color.GREEN);
                   }       else if (alter_männlich >= 45 && alter_männlich <= 54 && BMI_Männlich >=28 && BMI_Männlich <= 33) {
                       Skala.setText(String.valueOf("Du hast Übergewicht"));
                       bar.setBackground(Color.ORANGE);
                   }   else if (alter_männlich >= 45 && alter_männlich <= 54 && BMI_Männlich >=33 && BMI_Männlich <= 43) {
                       Skala.setText(String.valueOf("Adipositas"));
                       bar.setBackground(Color.RED);
                   }   else if (alter_männlich >= 45 && alter_männlich <= 54 && BMI_Männlich >=43) {
                       Skala.setText(String.valueOf("Starke Adipositas"));
                       bar.setBackground(Color.RED);
                   }
               

                       if (alter_männlich >= 55 && alter_männlich <= 64 && BMI_Männlich <=23) {
                       Skala.setText(String.valueOf("Du hast untergewicht"));
                       bar.setBackground(Color.RED);
                   }
                 
                       else if (alter_männlich >= 55 && alter_männlich <= 64 && BMI_Männlich >=23 && BMI_Männlich <= 29) {
                           Skala.setText(String.valueOf("Du hast Normal Gewicht"));
                           bar.setBackground(Color.GREEN);
                       }
               
                        else if (alter_männlich >= 55 && alter_männlich <= 64 && BMI_Männlich >=29  && BMI_Männlich <= 34) {
                           Skala.setText(String.valueOf("Du hast Übergewicht"));
                           bar.setBackground(Color.ORANGE);
                       }  else if (alter_männlich >= 55 && alter_männlich <= 64 && BMI_Männlich >= 34 && BMI_Männlich <= 44) {
                           Skala.setText(String.valueOf("Adipositas"));
                           bar.setBackground(Color.RED);
                       } else if (alter_männlich >= 55 && alter_männlich <= 64 && BMI_Männlich >=44) {
                           Skala.setText(String.valueOf("Du hast starkes übergewicht"));
                           bar.setBackground(Color.RED);
                       }
               
                     
                     
                       if (alter_männlich >= 64 && BMI_Männlich <=24) {
                           Skala.setText(String.valueOf("Du hast untergewicht"));
                           bar.setBackground(Color.RED);
                       } else if (alter_männlich >= 64 && BMI_Männlich >=24 && BMI_Männlich <=30) {
                           Skala.setText(String.valueOf("Du hast Normalgewicht"));
                           bar.setBackground(Color.GREEN);
                       } else if (alter_männlich >= 64 && BMI_Männlich >=30 && BMI_Männlich <=35) {
                           Skala.setText(String.valueOf("Du hast Übergewicht"));
                           bar.setBackground(Color.ORANGE);
                       } else if (alter_männlich >= 64 && BMI_Männlich >=35 && BMI_Männlich <=45) {
                           Skala.setText(String.valueOf("Adipositas"));
                           bar.setBackground(Color.RED);
                       } else if (alter_männlich >= 64 && BMI_Männlich >=45) {
                           Skala.setText(String.valueOf("Starke Adipositas"));
                           bar.setBackground(Color.RED);
                       }
                }
                }  
               
                catch(NumberFormatException x) {
                 Skala.setText(String.valueOf("Programmfehler überprüfe alles"));
                }
               
               
               
                try {
                if(weiblich.isSelected()) {
               
                String textfromfieldalterweiblich = fieldalter.getText();
                int alter_weiblich = Integer.parseInt(textfromfieldalterweiblich); //Alter
               
                String textfromfieldgrößeweiblich = körpergrösefield.getText();
                double körpergröße_weiblich = Double.parseDouble(textfromfieldgrößeweiblich);
               
                String textfromgewichtfieldweiblich = gewicht_field.getText();
                int gewicht_weiblich = Integer.parseInt(textfromgewichtfieldweiblich);  // Gewicht
               
                double BMI_Weiblich = gewicht_weiblich / (körpergröße_weiblich * körpergröße_weiblich);
               
                BMI_Weiblich = Math.round(BMI_Weiblich * 100.0) / 100.0;
               
                 BMI_ERGEBNIS.setText(String.valueOf("Ihr BMI Beträgt " + BMI_Weiblich));
               
                 BMI_ERGEBNIS.setFont(new Font("Arial", Font.BOLD, 23));
           
               
             
                 ClearButton.addActionListener(new ActionListener() {

                        @Override
                        public void actionPerformed(ActionEvent e) {
                            if(e.getSource() == ClearButton);
                            fieldalter.setText("");
                            körpergrösefield.setText("");
                            gewicht_field.setText("");
                             BMI_ERGEBNIS.setText("");
                             Skala.setText("");
                        }
                       
                       
                       
                       
                       
                    });
               
                       if (alter_weiblich >= 19 && alter_weiblich <= 24 && BMI_Weiblich <18){
                       Skala.setText(String.valueOf("Sie haben untergewicht für ihr Alter"));
                       Skala.setFont(new Font("Arial", Font.BOLD, 15));
                       bar.setBackground(Color.RED);
               
                      } else if (alter_weiblich >= 19 && alter_weiblich <= 24 && BMI_Weiblich >=18 && BMI_Weiblich <=24) {
                        Skala.setText(String.valueOf("Sehr gut Du hast Normalgewicht"));  
                         bar.setBackground(Color.GREEN);
                       } else if (alter_weiblich >= 19 && alter_weiblich <= 24 && BMI_Weiblich >=24 && BMI_Weiblich <=29) {
                         Skala.setText(String.valueOf("Du hast Übergewicht"));
                         bar.setBackground(Color.ORANGE);
                         
                       } else if (alter_weiblich >= 19 && alter_weiblich <= 24 && BMI_Weiblich >=29 && BMI_Weiblich <=39) {
                          Skala.setText(String.valueOf("Du hast Adipositas"));
                          bar.setBackground(Color.RED);
                       } else if (alter_weiblich >= 19 && alter_weiblich <= 24 && BMI_Weiblich >=39) {
                         Skala.setText(String.valueOf("Du hast starke Adipositas"));
                         bar.setBackground(Color.RED);
                       }
                     
                     
                     
                       if (alter_weiblich >= 25 && alter_weiblich <= 34 && BMI_Weiblich <19) {
                        Skala.setText(String.valueOf("Du hast untergewicht"));
                         bar.setBackground(Color.RED);
                       }   else if (alter_weiblich >= 25 && alter_weiblich <= 34 && BMI_Weiblich >=19 && BMI_Weiblich <=25) {
                           Skala.setText(String.valueOf("Du hast normal Gewicht"));
                           bar.setBackground(Color.GREEN);
                       }  else if (alter_weiblich >= 25 && alter_weiblich <= 34 && BMI_Weiblich >=25 && BMI_Weiblich <=30) {
                           Skala.setText(String.valueOf("Du hast leicht Übergewicht" ));
                           bar.setBackground(Color.ORANGE);
                       }else if (alter_weiblich >= 25 && alter_weiblich <= 34 && BMI_Weiblich >=30 && BMI_Weiblich <=40) {
                           Skala.setText(String.valueOf("Du hast Adipositas"));
                           bar.setBackground(Color.RED);
                       } else if (alter_weiblich >= 25 && alter_weiblich <= 34 && BMI_Weiblich >=40) {
                          Skala.setText(String.valueOf("Du hast Starke Adipositas"));
                          bar.setBackground(Color.RED);
                       }
                     
                 

                           if (alter_weiblich >= 35 && alter_weiblich <= 44 && BMI_Weiblich <=20) {
                           Skala.setText(String.valueOf("Du hast Untergewicht für dein Alter"));
                           bar.setBackground(Color.RED);
                       }   else if (alter_weiblich >= 35 && alter_weiblich <= 44 && BMI_Weiblich >=20 && BMI_Weiblich <= 26) {
                           Skala.setText(String.valueOf("Du hast normal Gewicht"));
                           bar.setBackground(Color.GREEN);
                       }  else if (alter_weiblich >= 35 && alter_weiblich <= 44 && BMI_Weiblich >=26 && BMI_Weiblich <= 31) {
                           Skala.setText(String.valueOf("Du hast Übergewicht"));
                           bar.setBackground(Color.ORANGE);
                       }
                        else if (alter_weiblich >= 35 && alter_weiblich <= 44 && BMI_Weiblich >=31 && BMI_Weiblich <= 41) {
                           Skala.setText(String.valueOf("Du hast Adipositas"));
                           bar.setBackground(Color.RED);
                       }  else if (alter_weiblich >= 35 && alter_weiblich <= 44 && BMI_Weiblich >=41) {
                           Skala.setText(String.valueOf("Starke Adipositas"));
                           bar.setBackground(Color.RED);
                       }
                   

                           if (alter_weiblich >= 45 && alter_weiblich <= 54 && BMI_Weiblich <=21) {
                           Skala.setText(String.valueOf("Du hast untergewicht"));
                           bar.setBackground(Color.RED);
                       }       else if (alter_weiblich >= 45 && alter_weiblich <= 54 && BMI_Weiblich >=21 && BMI_Weiblich <= 27) {
                           Skala.setText(String.valueOf("Du hast normal Gewicht"));
                           bar.setBackground(Color.GREEN);
                       }       else if (alter_weiblich >= 45 && alter_weiblich <= 54 && BMI_Weiblich >=27 && BMI_Weiblich <= 32) {
                           Skala.setText(String.valueOf("Du hast Übergewicht"));
                           bar.setBackground(Color.ORANGE);
                       }   else if (alter_weiblich >= 45 && alter_weiblich <= 54 && BMI_Weiblich >=32 && BMI_Weiblich <= 42) {
                           Skala.setText(String.valueOf("Adipositas"));
                           bar.setBackground(Color.RED);
                       }   else if (alter_weiblich >= 45 && alter_weiblich <= 54 && BMI_Weiblich >=42) {
                           Skala.setText(String.valueOf("Starke Adipositas"));
                           bar.setBackground(Color.RED);
                       }
                   

                           if (alter_weiblich >= 55 && alter_weiblich <= 64 && BMI_Weiblich <=22) {
                           Skala.setText(String.valueOf("Du hast untergewicht"));
                           bar.setBackground(Color.RED);
                       }
                     
                           else if (alter_weiblich >= 55 && alter_weiblich <= 64 && BMI_Weiblich >=22 && BMI_Weiblich <= 28) {
                               Skala.setText(String.valueOf("Du hast Normal Gewicht"));
                               bar.setBackground(Color.GREEN);
                           }
                   
                            else if (alter_weiblich >= 55 && alter_weiblich <= 64 && BMI_Weiblich >=28  && BMI_Weiblich <= 33) {
                               Skala.setText(String.valueOf("Du hast Übergewicht"));
                               bar.setBackground(Color.ORANGE);
                           }  else if (alter_weiblich >= 55 && alter_weiblich <= 64 && BMI_Weiblich >= 33 && BMI_Weiblich <= 43) {
                               Skala.setText(String.valueOf("Adipositas"));
                               bar.setBackground(Color.RED);
                           } else if (alter_weiblich >= 55 && alter_weiblich <= 64 && BMI_Weiblich >=43) {
                               Skala.setText(String.valueOf("Du hast starkes übergewicht"));
                               bar.setBackground(Color.RED);
                           }
                   
                         
                       
                           if (alter_weiblich >= 64 && BMI_Weiblich <=23) {
                               Skala.setText(String.valueOf("Du hast untergewicht"));
                               bar.setBackground(Color.RED);
                           } else if (alter_weiblich >= 64 && BMI_Weiblich >=23 && BMI_Weiblich <=29) {
                               Skala.setText(String.valueOf("Du hast Normalgewicht"));
                               bar.setBackground(Color.GREEN);
                           } else if (alter_weiblich >= 64 && BMI_Weiblich >=29 && BMI_Weiblich <=34) {
                               Skala.setText(String.valueOf("Du hast Übergewicht"));
                               bar.setBackground(Color.ORANGE);
                           } else if (alter_weiblich >= 64 && BMI_Weiblich >=34 && BMI_Weiblich <=44) {
                               Skala.setText(String.valueOf("Adipositas"));
                               bar.setBackground(Color.RED);
                           } else if (alter_weiblich >= 64 && BMI_Weiblich >=44) {
                               Skala.setText(String.valueOf("Starke Adipositas"));
                               bar.setBackground(Color.RED);
                           }}
                }
                   
            catch(NumberFormatException c) {
            Skala.setText(String.valueOf("Programmfehler überprüfe alles"));
            }
           
           
            }
                    });
        contentPane.add(BMI_berechnen);
       
       
       
                   }
                   }
Hier beginnt die zweite Klasse                                                               import java.awt.Component;
import java.awt.Desktop;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.net.URI;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Erklärungsitem extends JFrame{
   
    JButton openLink;
    JButton close;
    JTextField linkField;
    JTextField linkfield_gesundleben;
    JTextField field_guterbmi;
   
    JTextField hoherbmifield;
   
    JLabel hoherbmilabel;
    JLabel labellink_tabellen;
    JLabel label_gesundleben;
    JLabel guterbmilabel;
   
   
    public Erklärungsitem() {
        this.setSize(400, 400);
        this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        this.setLocationRelativeTo(null);
        this.setLayout(null);
        this.setTitle("BMI-Rechner");
       
        ImageIcon image = new ImageIcon("bmi-rechner.jpg");
        this.setIconImage(image.getImage());
       
        close = new JButton("Exit");
        close.setBounds(330, 0, 60, 30);
        close.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if(e.getSource() == close) {
                    dispose();
                }
            }
        });
       
        labellink_tabellen = new JLabel();
        labellink_tabellen.setBounds(150, 40, 100, 30);
        labellink_tabellen.setText("BMI-Tabellen");
        this.add(labellink_tabellen);
       
       
        label_gesundleben = new JLabel();
        label_gesundleben.setBounds(110 , 120, 300, 30);
        label_gesundleben.setText("Tipps um gesund zu Leben");
        this.add(label_gesundleben);
       
       
       
       
       
        linkfield_gesundleben = new JTextField("https://www.stmgp.bayern.de/vorsorge/gesund-leben/");
        linkfield_gesundleben.setEditable(false);
        linkfield_gesundleben.setBounds(10, 80, 300, 30);
        linkfield_gesundleben.addMouseListener((MouseListener) new MouseAdapter() {
       
            public void mouseClicked(MouseEvent e) {
                try {
                    Desktop.getDesktop().browse(new URI(linkfield_gesundleben.getText()));
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
         });
        this.add(linkfield_gesundleben);
       
       
        hoherbmifield = new JTextField("https://www.stiftung-gesundheitswissen.de/wissen/adipositas/folgeerkrankungen");
        hoherbmifield.setEditable(false);
        hoherbmifield.setBounds(10, 165, 300, 30);
        hoherbmifield.addMouseListener((MouseListener) new MouseAdapter() {
       
            public void mouseClicked(MouseEvent e) {
                try {
                    Desktop.getDesktop().browse(new URI(hoherbmifield.getText()));
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
         });
        this.add(hoherbmifield);
       
        hoherbmilabel = new JLabel();
        hoherbmilabel.setBounds(90 , 200, 300, 30);
        hoherbmilabel.setText("Nebenwirkungen vom Hohem BMI");
        this.add(hoherbmilabel);
       
       
       
       
       
       
       
       
        this.add(close);
        linkField = new JTextField("https://www.rezeptrechner-online.de/blog/bmi-tabelle-rechner/");
        linkField.setEditable(false);
        linkField.setBounds(10, 10, 300, 30);
        linkField.addMouseListener((MouseListener) new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                try {
                    Desktop.getDesktop().browse(new URI(linkField.getText()));
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
         });
        this.add(linkField);
       
       
       
       
        this.add(close);
        field_guterbmi = new JTextField("https://www.verbraucherzentrale.de/wissen/lebensmittel/schlankheitsmittel-und-diaeten/bodymassindex-was-kann-er-und-was-nicht-10441");
        field_guterbmi.setEditable(false);
        field_guterbmi.setBounds(10, 240, 300, 30);
        field_guterbmi.addMouseListener((MouseListener) new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                try {
                    Desktop.getDesktop().browse(new URI(field_guterbmi.getText()));
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
         });
        this.add(field_guterbmi);
       
       
       
        guterbmilabel = new JLabel();
        guterbmilabel.setBounds(90 , 270, 300, 30);
        guterbmilabel.setText("Wofür ist der BMI gut");
        this.add(guterbmilabel);
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
        this.setVisible(true);
    }
}
 
Ich will mal einfach paar Dinge zusammen schreiben.

Part 1: Elemente direkt zum Code selbst

- Ich empfehle die Nutzung einer Entwicklungsumgebung, die direkt im Editor Hinweise gibt. Ich empfehle generell IntelliJ, welches sehr viel bietet und in der Community Edition kostenlos verfügbar ist. Da sieht man dann direkt ein paar Dinge, wie z.B. ungenutzte Dinge, die dann grau dargestellt werden:

Ungenutzte imports:
Bildschirmfoto 2023-05-15 um 19.04.27.png

Ungenutzte Variablen:
Bildschirmfoto 2023-05-15 um 19.05.21.png

- Namensgebung ist benannt worden. Camelcase ist üblich - bis auf public static final Kontanten, welche In Uppercase screaming geschrieben werden. Also statt BMI_Rechner wäre das dann BmiRechner oder BMIRechner. Und Variablen fangen klein an und haben keine Sonderzeichen: Erklärungsitem -> erklaerungsItem (Oder besser komplett englische Begriffe!)

- Main Methode: Ein try / catch wenn keine Exception geworfen wird? Das ist unnötig. Und diese Form der inneren Klasse ist mit Java 8 und den funktionalen Erweiterungen der Sprache eigentlich unüblich. Da wäre eine Lambda Expression oder Methodenreferenz besser:

Java:
    public static void main(String[] args) {
        EventQueue.invokeLater(BMIRechner::createAndStartUI);
    }

    public static void createAndStartUI() {
        BMIRechner frame = new BMIRechner();
        frame.setVisible(true);
    }

- extends JFrame - FCoI: Favour Composition over Inheritance

- Keine unnötig vielen Leerzeilen wie hier:
Bildschirmfoto 2023-05-15 um 19.13.39.png

Der Window Builder baut natürlich so ein Müll (vermute ich), aber das, was wir oben mit der Methodenreferenz hatten, das gilt auch bei den Action Listenern. Also statt:
Java:
        Erklärungsitem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if(e.getSource() == Erklärungsitem) {
                    new Erklärungsitem();
                }
            }
        });

hat man besser eine Methode mit dem richtigen Namen und dann eine MethodenReferenz:
Java:
        Erklärungsitem.addActionListener(this::newErklaerungsItem);


    // Und dann natürlich eine eigene Methode.
    public void newErklaerungsItem(ActionEvent e) {
        new Erklärungsitem();
    }

- Die Prüfung, ob denn getSource() das Control ist, ist natürlich überflüssig. Die Methode macht nur diese eine Sache und das war es!


Part 2: Design

- Du hast alles in die UI gequetscht. Du hast also zwei Fenster und pro Fenster eine Klasse. Du hast die Logik nicht getrennt. Das merkt man dann vor allem an der großen Methode, die Du zur Berechnung des BMI geschrieben hast. Das könnte eine eigene Klasse sein. UI und Logik trennt man!

- Dann hast Du den Fall, dass Du viele if / else if / else Kombinationen hast. Da müsstest Du mal schauen, ob Du das so unterteilen kannst, dass Du da Werte abfragst je nach Alter oder so. Und dann kannst Du mit einer TreeMap arbeiten um das jeweilige Element einfach abfragen zu können. Dann hättest Du nur eine Initialisierung von Maps und der Code wird relativ einfach und übersichtlich.

Das wären so ein paar Anregungen von meiner Seite. Ist natürlich nicht vollständig sondern nur ein schneller Überblick.
 
Zwecks Erfolgserlebnis: die GUI und die Berechnung funktionieren grundsätzlich (auch wenn die Menge an LOC kaum zu rechtfertigen sein dürfte...), allerdings funktioniert "Statistik" wohl nicht, und "Männlich" / "Weiblich" sollte wohl eine RadioGroup sein

bmi_rechner.png
 
Zwecks Erfolgserlebnis: die GUI und die Berechnung funktionieren grundsätzlich (auch wenn die Menge an LOC kaum zu rechtfertigen sein dürfte...), allerdings funktioniert "Statistik" wohl nicht, und "Männlich" / "Weiblich" sollte wohl eine RadioGroup sein

Anhang anzeigen 21110
Hey danke dir , die Statistik wolte ich noch einbauen wolte nur mal nach Feedback fragen bevor ich es fertig stelle aber was meinst du mit radio group? Und was meinst du mit der Menge an LOC ? 😀
 
Ich will mal einfach paar Dinge zusammen schreiben.

Part 1: Elemente direkt zum Code selbst

- Ich empfehle die Nutzung einer Entwicklungsumgebung, die direkt im Editor Hinweise gibt. Ich empfehle generell IntelliJ, welches sehr viel bietet und in der Community Edition kostenlos verfügbar ist. Da sieht man dann direkt ein paar Dinge, wie z.B. ungenutzte Dinge, die dann grau dargestellt werden:

Ungenutzte imports:
Anhang anzeigen 21102

Ungenutzte Variablen:
Anhang anzeigen 21105

- Namensgebung ist benannt worden. Camelcase ist üblich - bis auf public static final Kontanten, welche In Uppercase screaming geschrieben werden. Also statt BMI_Rechner wäre das dann BmiRechner oder BMIRechner. Und Variablen fangen klein an und haben keine Sonderzeichen: Erklärungsitem -> erklaerungsItem (Oder besser komplett englische Begriffe!)

- Main Methode: Ein try / catch wenn keine Exception geworfen wird? Das ist unnötig. Und diese Form der inneren Klasse ist mit Java 8 und den funktionalen Erweiterungen der Sprache eigentlich unüblich. Da wäre eine Lambda Expression oder Methodenreferenz besser:

Java:
    public static void main(String[] args) {
        EventQueue.invokeLater(BMIRechner::createAndStartUI);
    }

    public static void createAndStartUI() {
        BMIRechner frame = new BMIRechner();
        frame.setVisible(true);
    }

- extends JFrame - FCoI: Favour Composition over Inheritance

- Keine unnötig vielen Leerzeilen wie hier:
Anhang anzeigen 21107

Der Window Builder baut natürlich so ein Müll (vermute ich), aber das, was wir oben mit der Methodenreferenz hatten, das gilt auch bei den Action Listenern. Also statt:
Java:
        Erklärungsitem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if(e.getSource() == Erklärungsitem) {
                    new Erklärungsitem();
                }
            }
        });

hat man besser eine Methode mit dem richtigen Namen und dann eine MethodenReferenz:
Java:
        Erklärungsitem.addActionListener(this::newErklaerungsItem);


    // Und dann natürlich eine eigene Methode.
    public void newErklaerungsItem(ActionEvent e) {
        new Erklärungsitem();
    }

- Die Prüfung, ob denn getSource() das Control ist, ist natürlich überflüssig. Die Methode macht nur diese eine Sache und das war es!


Part 2: Design

- Du hast alles in die UI gequetscht. Du hast also zwei Fenster und pro Fenster eine Klasse. Du hast die Logik nicht getrennt. Das merkt man dann vor allem an der großen Methode, die Du zur Berechnung des BMI geschrieben hast. Das könnte eine eigene Klasse sein. UI und Logik trennt man!

- Dann hast Du den Fall, dass Du viele if / else if / else Kombinationen hast. Da müsstest Du mal schauen, ob Du das so unterteilen kannst, dass Du da Werte abfragst je nach Alter oder so. Und dann kannst Du mit einer TreeMap arbeiten um das jeweilige Element einfach abfragen zu können. Dann hättest Du nur eine Initialisierung von Maps und der Code wird relativ einfach und übersichtlich.

Das wären so ein paar Anregungen von meiner Seite. Ist natürlich nicht vollständig sondern nur ein schneller Überblick.
Danke dir für deinen Beitrag leider muss ich gestehen das ich das mit dem Erklärungsitem war und nicht der Window Bilder haha. Ansich würde ich gerne intelij benutzen aber auf meinem Laptop ist es zu langsam.
 
Und ja, IJ braucht gerne mal >8 gb ram... 😕
Also kleine Projekte, wie sie ein Anfänger haben dürfte, werden kaum so viel Speicher brauchen ...

Mein IntelliJ Ultimate braucht keine 3GB bei kleinen Projekten ...

Sorry für die vielen Posts ... Das LOC-Phänomen tritt auch gelegentlich hier im Forum auf ... manche schreiben ja gerne viel, aber die Quintessenz dessen muss man dann immer unter den vielen Zeichen suchen. 😀
Der kleine Tobias möchte wieder aus dem Bällespieleparadies abgeholt werden?
 
Sorry für die vielen Posts ... Das LOC-Phänomen tritt auch gelegentlich hier im Forum auf ... manche schreiben ja gerne viel, aber die Quintessenz dessen muss man dann immer unter den vielen Zeichen suchen. 😀
Du meinst warscheinlich die ganzen if und else if Anweisungen oder ?😂 aufjedenfall danke für deinen tipp. Meiner hat eig genug RAM aber intelij ist trz langsam im Gegensatz zu eclipse 😂
 
Du meinst warscheinlich die ganzen if und else if Anweisungen oder ?
Das ist ein User, der hier immer wieder negativ aufschlägt und der so lange Antworten wie meine nicht ab kann. Da er sich zu oft nicht benehmen kann, ist sein Account nach ca. 7 Tagen meist gesperrt. Daher schon jetzt: Nicht wundern, wenn es etwas aus dem Ruder laufen sollte ... Mich wundert nur, dass es jetzt nach keinem Tag schon so weit ist, dass er solche Posts bringt ...

Mein intelij sollte ja dann flüssig laufen aber es läuft eher semi vlt hast du ja ein tipp damit es besser läuft 🙂
Typische Bottlenecks können sein:
  • Festplatte - SSD sind existenziell
  • Virenscanner kann IntelliJ massiv beeinflussen. Bei Windows Defender kann IntelliJ da die Verzeichnisse aber auch auf Wunsch automatisch ausklammern.
  • Speicher kann man beobachten, aber da habe ich keine Probleme mit.

Dann ist die Frage, was langsam ist. Nach dem Öffnen eines Projektes macht IntelliJ einiges. Es wird alles gescannt und Index-Dateien werden erstellt und all sowas. Das kann also etwas dauern - vor allem beim ersten Öffnen. Aber sonst ist IntelliJ sehr flott. Es macht aber halt auch sehr viel in Sache Analyse und Auswertung des Codes. Das kann etwas CPU kosten. Aber ich hatte es auch schon auf älteren Systemen im Einsatz wie z.B. einem MBA 11" von 2014 (Erst letztes Jahr ersetzt) oder ein HP ZBook 15 G2 (Ebenfalls bis letztes Jahr im Einsatz).

Wenn Du mit Eclipse klar kommst, dann ist das aber auch ok. Aber die Erfahrung zeigt, dass Eclipse für Anfänger eher nicht geeignet ist.
 
Dass IJ wenig RAM-Speicher braucht, ist natürlich Quatsch.
Also ich habe nie gesagt, dass es wenig ist. Ich habe aber eine konkrete Zahl genannt. Und bezüglich Quatsch: Es ist ein einfacher Fakt, der auch einfach zu kontrollieren ist:
Bildschirmfoto 2023-05-16 um 08.18.13.png

Das ist IntelliJ Ultimate mit dem JAdventure Projekt offen (derzeit 25 Klassen, also deutlich größer als die üblichen Anfängerprojekte). Und natürlich Plugins wie GitHub Copilot und so.

Was man aber auch erkennen kann: 82 Threads - also eine CPU mit mehreren Cores macht sich bestimmt gut. So eine ältere i3 oder i5 Notebook CPU mit 2Cores ohne Hyperthreading wird sich also deutlich langsamer anfühlen. (Die Systeme, die ich genannt hatte, waren von der CPU alle nicht die schlechtesten - das MBA 11" hatte z.B. die i7 CPU drin, die halt auch mehr Cores hatte und so. Das ZBook eh, das war noch eine Nummer besser.)

Ansonsten ist es lustig, dass Du unterschwellig unterstellst, dass ich nicht helfen würde oder auf Fragen nicht antworten würde. Danke für den guten Witz, aber so off Topic Quatsch werde ich nicht weiter behandeln. (Beim Thema Speicherverbrauch ist das ja schon gut erkennbar!)

Edit: Habe jetzt auch noch einmal schnell auf Windows geschaut. Hätte ja sein können, dass da der Speicherverbrauch größer ist:
1684218477084.png
Das hat mich jetzt aber überrascht, denn da habe ich gerade ein Projekt von meinem Beruf offen. Da ist also deutlich mehr an Inhalt drin. (Struktur von mehreren Maven Projekten). Wie kann das so niedrig sein? Ich hatte da jetzt etwas von 3-4 GB erwartet aber 2,2 GB?

Aber evtl. ist Linux ja ganz mies, so dass IJ unter Linux viel Speicher verbraucht ... oder hat da jemand keine Ahnung? Oder was genau macht da eine bestimmte Person, wenn IJ da so viel Speicher belegt bei ihm?

Edit 2: Man kann natürlich mit Eclipse vergleichen. Eclipse verbraucht deutlich weniger Speicher. Ein einfacher Workspace hat da dann eine Speicherbelegung von 1,1 GB Speicher bei mir. Aber das ist dann einfach nur das Eclipse JEE 2023-03 bei mir. Aber wir sind in einem Bereich, bei dem selbst mit 4GB gut gearbeitet werden kann. (Was ich übrigens eine Zeit lang hatte. Ich hatte eine Zeit lang YT Videos mit virtuellen Systemen aufgezeichnet. Da hatte ich dann Windows und Linux in jeweils VMs mit zugewiesenen 4 GB Speicher / 4 Cores. Das war ein Setup, das vernünftig funktionierte.)
 
Zuletzt bearbeitet:

Zurück
Oben