有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

GUI Java中的swing BMI计算器;

我想用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

    }
}

共 (1) 个答案

  1. # 1 楼答案

    我会这样做:

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

    结果应为JTextArea类型,但应设置换行:

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

    您应该考虑在匿名类中实现ActionListener,而不是直接在frame类中实现(尤其是当您想要添加一些其他按钮或复选框时)

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