根据组合框选择更新文本框

时间:2012-10-15 23:28:50

标签: java swing event-handling actionlistener jcombobox

我正在制作一个小程序,根据从java中的组合框中选择的5种不同的身体活动来计算燃烧的卡路里。用户有5种选择:保龄球,射箭,涂抹,摔跤和绘画。这里是计算出给定数字的网站,用户输入他的体重以及他在多长时间内锻炼,在几分钟或几小时内,当他/她点击计算时,它应显示燃烧的总卡路里。

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);
            }
        });
    }
}

1 个答案:

答案 0 :(得分:3)

  

我是否制作了一个if else声明,如果选择了射箭并且重量文本框中有一个数字?&#34;然后使用这个公式?

我还没有阅读您的所有代码,但您希望通过添加对更新文本框方法updateTextBox();的调用并删除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
    }
}

要完成这项工作,你需要制作你的&#34; jComboBox1&#34;静态的。 因此,请在第一课static JComboBox jComboBox1 = null

上方添加此行

然后替换JComboBox jComboBox1 = new ComboBox(actStrings);

使用此jComboBox1 = new JComboBox(actStrings);,因为我们之前已使用static JComboBox jComboBox1 = null

创建了组合框