我正在制作一个小程序,根据从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);
}
});
}
}
我是否要做一个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
上面加上这行
然后更换JComboBox jComboBox1 = new ComboBox(actStrings);
使用jComboBox1 = new JComboBox(actStrings);
,因为我们之前已经使用static JComboBox jComboBox1 = null
创建了组合框