2013-02-10 144 views
-2

我想用Java中的GUI创建一个BMI计算器。我对GUI甚至Java都很陌生。计算器假设显示BMI的建议,甚至时间和日期。然而,只有BMI显示,其余不能。..我一直在网上搜索如何显示结果从其他条件在线,但无济于事。这是我的代码;GUI中的BMI计算器;

public class BMI extends JFrame implements ActionListener { 

    private static final JButton JButton = null; 
    private JFrame frame; 
    private JPanel panel; 
    private JLabel heightLabel, weightLabel, BMILabel; 
    private JTextField height, weight, result; 
    private JButton calculate; 
    String Height, Weight; 
    double number1, number2, BMI; 
    static String output = "Results"; 
    static int jopIcon = JOptionPane.QUESTION_MESSAGE; 
    boolean bFlag = true; //state, true means no exception 

    public BMI() { 

     frame = new JFrame("BMI Calculator"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
//create labels for the height and weight textfields 
     heightLabel = new JLabel("Your height in meters:"); 
     weightLabel = new JLabel("Your weight in kilograms: "); 
//create a "this is your BMI" label 
     BMILabel = new JLabel("Your BMI is "); 
//create a result label to hold the BMI value 
     result = new JTextField(""); 
//create a JTextField to hold the person's height in kilograms 
     height = new JTextField(1); 
//create a JTextField to hold the person's weight in metres 
     weight = new JTextField(1); 


     calculate = new JButton("Calculate BMI"); 

//set up the JPanel to go on the JFrame 
     panel = new JPanel(); 


     panel.add(heightLabel); 
     panel.add(height); 
//add the weight label and weight textfield to the panel 
     panel.add(weightLabel); 
     panel.add(weight); 
//add the button to the panel 

     panel.add(BMILabel); 
//add the label that holds the result to the panel 
     panel.add(result); 
//add the panel to the frame 
     panel.add(calculate); 
//add the BMI label to the panel 



     frame.getContentPane().add(panel); 

     JPanel p1 = new JPanel(); 
     panel.setLayout(new GridLayout(4, 1)); 
     add(p1, BorderLayout.SOUTH); 




     calculate.addActionListener(this); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(400, 400); 
     frame.setVisible(true);//important must [email protected]! if not GUI will not be display 

    } 

    public String getDateTime() { 
     DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
     Date date = new Date(); 
     return dateFormat.format(date); 
    } 

    public void calculateBMI(double number1, double number2) { 
     try { 
      BMI = number2/((number1) * 2); 

     } catch (NumberFormatException nfe) { 
      output += "\n\n Whoa! Input error: must enter valid integers";//if exception comes out, prepare error message 
      jopIcon = JOptionPane.ERROR_MESSAGE; 
     } 
    } 

    public void calculate() { 
     Height = height.getText(); 
     Weight = weight.getText();//declare the Height string with Jtext height 

     try { 
      number1 = Double.parseDouble(Height); 
      number2 = Double.parseDouble(Weight);//exception may come out 

      calculateBMI(number1, number2); 



     } finally { 

      if (BMI >= 27.5) { 

       output += "\n\n You're in the High Risk zone(UnHealthy). Please start losing weight! It's a MUST!"; 

      } else if (BMI <= 23 || BMI < 27.4) { 

       output += "\n\n You're in the Moderate Risk zone. Please start going on diet and lose some weight"; 

      } else if (BMI <= 18.5 || BMI < 22.9) { 
       output += " You're in the Low Risk zone(Healthy). Hopefully you can maintain this way! ^^"; 

      } else if (BMI < 18.4) { 
       output += "\n\n You really need to start eating more. Too skinny and unhealthy for your body"; 

      } 
     } 

    } 

    public static void main(String[] args) { 




     BMI bmi = new BMI(); 



    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
//call the calculate 

     this.calculate(); 

     result.setText("" + BMI); 

// TODO Auto-generated method stub 

    } 
} 
+4

如果您要求免费帮助,请至少尝试发布格式良好的代码并不多。 – 2013-02-10 05:19:00

+1

该解决方案仅仅是添加一个组件,该组件将显示您想要显示给GUI的数据*,就像您用来显示重量,高度和结果*一样。您已经知道如何添加这些JTextField组件,因此添加更多JTextFields或JLabel以显示附加信息应该很简单,不是吗? – 2013-02-10 05:21:16

+0

我没有看到你试图解决问题的地方,所以你来这里可能还为时过早。为什么不首先尝试显示附加信息,并且只有在您的尝试不起作用时才会尝试进行尝试? – 2013-02-10 05:22:25

回答

2

我会做这样的:

@Override 
public void actionPerformed(ActionEvent arg0) { 
    calculate(); 
    result.setText(output); 
} 

结果应该是类型的JTextArea但是换行应设置:

result = new JTextArea(); 
result.setLineWrap(true); 

而且你应该考虑实施的ActionListener在一个匿名类而不是直接在框架类(特别是当你想添加一些其他按钮或复选框)

calculate.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent ev) { 
     calculate(); 
     result.setText(output); 
    } 
}); 
+0

谢谢!这有助于..最后我的if else条件可以显示。所以它的实际情况与我如何得到体重指数一样。我现在明白..:D – Khair 2013-02-10 05:48:19