3

私は、Javaのコンボボックスから選択された5つの異なる身体活動に基づいて消費カロリーを計算する小さなプログラムを作成しています。ユーザーには、ボウリング、アーチェリー、ラクロス、レスリング、ペイントの5つのオプションがあります。これは、与えられた数値が計算されたWebサイトです。ユーザーは、体重と運動時間を分単位または時間単位で入力します。計算を押すと、消費カロリーの合計が表示されます。

http://www.nutristrategy.com/activitylist4.htm

私の問題は、選択に基づいてフィールドを更新する方法がわからないことです。つまり、選択を待機し、式を更新して、体重に基づいて消費カロリーを計算するメソッドを作成する必要があります。どうすればこれを行うことができますか?「アーチェリーが選択されていて、ウェイトテキストボックスに数字がある場合」というif elseステートメントを作成しますか?次に、この式を使用しますか?コンボボックスからの選択を確認する方法がわかりません。

これが私のコードです。

import java.awt.Component;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import net.miginfocom.swing.MigLayout;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class calorie extends JFrame {

    public calorie() {
        JLabel titleLabel = new JLabel("Calories Burned during excercise");
        titleLabel.setFont(new Font("Serif", Font.BOLD, 20));
        titleLabel.setForeground(Color.blue);

        final JLabel distLabel = new JLabel("Choose an Activity");
        final JTextField distText = new JTextField(8);
        String[] actStrings = {"bowling", "lacrosse", "wrestling", "painting", "archery"};
        JComboBox jComboBox1 = new JComboBox(actStrings);
        jComboBox1.setEditable(true);

        final JLabel fuelLabel = new JLabel("Current weight:");
        final JTextField fuelText = new JTextField(8);

        final JLabel actTime = new JLabel("How long did you work out:");
        final JTextField time = new JTextField(8);
        String[] timeStrings = {"Minutes", "Hours"};
        JComboBox jComboBox2 = new JComboBox(timeStrings);
        jComboBox2.setEditable(true);

        final JLabel mpgLabel = new JLabel("Calories burned = ");
        final JTextField mpgText = new JTextField(8);

        JButton clearButton = new JButton("Clear");
        JButton calcButton = new JButton("Calculate");
        final JLabel labelPic1;
        final ImageIcon[] imgIcons;
        String[] fileNames = {"pics/bowling.jpg", "pics/lacrosse.jpg",
            "pics/wrestling.jpg", "pics/painting.jpg", "pics/archery.jpg"};
        imgIcons = new ImageIcon[fileNames.length];

        BufferedImage image = null;
        for (int i = 0; i < fileNames.length; i++) {
            try {
                image = ImageIO.read(new File(fileNames[i]));
            } catch (IOException ex) {
                System.out.println(ex.toString());
                System.out.println(fileNames[i]);
                JOptionPane.showMessageDialog(null, ex.toString() + " " + fileNames[i]);
                System.exit(0); // exit program
            }
            Image newimg = image.getScaledInstance(200, 200, java.awt.Image.SCALE_SMOOTH);
            imgIcons[i] = new ImageIcon(newimg);
        }
        labelPic1 = new JLabel(imgIcons[0]);
        setResizable(false);
        JPanel p = new JPanel(new MigLayout("", "[][][][][]",
                "[][][][][][][][][][][][][][][]"));
        p.setBackground(Color.WHITE);
        setContentPane(p);
        p.add(labelPic1, "cell 0 3 1 3");
        p.add(calcButton, "cell 0 9");
        p.add(titleLabel, "cell 1 0 2 1");
        p.add(distLabel, "cell 0 2");
        p.add(fuelLabel, "cell 1 5");
        p.add(mpgLabel, "cell 1 9");
        p.add(jComboBox1, "cell 1 2");
        p.add(fuelText, "cell 1 7");
        p.add(jComboBox2, "cell 1 7");
        p.add(actTime, "cell 0 7");
        p.add(distText, "cell 1 5");
        p.add(mpgText, "cell 1 9");

        jComboBox1.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent event) {
                //JComboBox jComboBox1 = (JComboBox)event.getSource();
                JComboBox jComboBox1 = (JComboBox) event.getSource();
                if (jComboBox1.getSelectedItem() == "bowling") {
                    labelPic1.setIcon(imgIcons[0]);
                }
                if (jComboBox1.getSelectedItem() == "lacrosse") {
                    labelPic1.setIcon(imgIcons[1]);
                }
                if (jComboBox1.getSelectedItem() == "wrestling") {
                    labelPic1.setIcon(imgIcons[2]);
                }
                if (jComboBox1.getSelectedItem() == "painting") {
                    labelPic1.setIcon(imgIcons[3]);
                }
                if (jComboBox1.getSelectedItem() == "archery") {
                    labelPic1.setIcon(imgIcons[4]);
                }
            }
        });

        calcButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent event) {

                if (isNumeric(distText.getText()) && isNumeric(fuelText.getText())) {
                    double fuel;
                    double dist;
                    double result;
                    fuel = Double.parseDouble(fuelText.getText());
                    dist = Double.parseDouble(distText.getText());
                    result = dist / fuel;
                    mpgText.setText(String.format("%f", result));
                } else {
                    JOptionPane.showMessageDialog(null, "Enter distance traveled and fuel used");
                }
            }
        });
        setTitle("Calorie Calculator");
        pack();
        setLocationRelativeTo(null);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    private static boolean isNumeric(String text) {
        try {
            Double.parseDouble(text);
        } catch (Exception e) {
            return false;
        }
        return true;
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                try {
                    UIManager.setLookAndFeel(
                            // "javax.swing.plaf.metal.MetalLookAndFeel");
                            // "com.sun.java.swing.plaf.motif.MotifLookAndFeel");
                            UIManager.getCrossPlatformLookAndFeelClassName());
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                new calorie().setVisible(true);
            }
        });
    }
}
4

1 に答える 1

3

「アーチェリーが選択されていて、ウェイトテキストボックスに数字がある場合」というif elseステートメントを作成しますか?次に、この式を使用しますか?

はい。

updateTextBox();すべてのコードを読んだわけではありませんが、update textboxメソッドへの呼び出しを追加して、を削除することにより、このようなことをしたいと考えていますJComboBox jComboBox1 = (JComboBox) event.getSource();

編集、以下のコードを更新:

public void actionPerformed(ActionEvent event)
{
    updateTextBox();
}

以下は、テキストボックスを変更および更新できる方法です。

public void updateTextBox()
{
    if (jComboBox1.getSelectedIndex() == 0) //bowling
    {
        labelPic1.setIcon(imgIcons[0]);
        //Update textbox here to show results for item 0
    }
    else if (jComboBox1.getSelectedIndex() == 1) //lacrosse
    {
        labelPic1.setIcon(imgIcons[1]);
        //Update textbox here to show results for item 1
    }
}

これを機能させるには、「jComboBox1」を静的にする必要があります。したがって、この行を最初のクラスの上に追加しますstatic JComboBox jComboBox1 = null

その後、交換してくださいJComboBox jComboBox1 = new ComboBox(actStrings);

jComboBox1 = new JComboBox(actStrings);以前にコンボボックスを作成したので、これでstatic JComboBox jComboBox1 = null

于 2012-10-15T23:55:03.977 に答える