-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 に答える