-2

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

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 HAVE@! 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

1 回答 1

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);
    }
});
于 2013-02-10T05:37:23.157 回答