2012-10-15 127 views
3

我正在制作一个小程序,它根据从java中的组合框中选择的5种不同的物理活动来计算消耗的卡路里。用户有5种选择:保龄球,射箭,lacross,摔跤和绘画。这里是计算给定数字的网站,用户在几分钟或几小时内输入他的体重和他制定的体重多久,当他/她进行计算时,它应显示燃烧的总卡路里。基于组合框选择的更新文本框

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

回答

3

我做出的if else语句说,“如果选择了射箭和存在的重文本是多少?”那么使用这个公式?

是。

我还没有读取所有代码,但是您希望通过添加对更新文本框方法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 
    } 
} 

为了使这项工作,你需要让你的“jComboBox1”静。 所以加入这一行的拳头级以上static JComboBox jComboBox1 = null

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

,因为我们已经与static JComboBox jComboBox1 = null

+0

创建的组合框前面谢谢我想通了 – user1730008

+0

以防万一,我更新我的代码在第一个框中删除getItem检查,因为'updateTextBox()'处理它,所以不需要它。 – sorifiend