Java 我在gui程序中做错了什么?
我试图创建一个程序,让用户选择一个项目。选择项目后,将出现一个包含总价成本的框。当我运行程序时,我点击了一个项目,结果是否定的。似乎我的if和else语句是错误的,我就是不知道如何正确地修复它Java 我在gui程序中做错了什么?,java,user-interface,if-statement,Java,User Interface,If Statement,我试图创建一个程序,让用户选择一个项目。选择项目后,将出现一个包含总价成本的框。当我运行程序时,我点击了一个项目,结果是否定的。似乎我的if和else语句是错误的,我就是不知道如何正确地修复它 package javaapplication118; import java.awt.Color; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
package javaapplication118;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class pizza extends JFrame {
JTextField textField, priceField;
JCheckBox pineApple, drink, delivery, meatballs;
JButton button;
pizza() {
super("Pizza order");
setLayout(new FlowLayout());
textField = new JTextField("hello please check anything you would like to order");
textField.setEditable(false);
textField.setBackground(Color.yellow);
add(textField);
EventHandler handler = new EventHandler();
pineApple = new JCheckBox("Pine apples");
pineApple.addItemListener(handler);
add(pineApple);
drink = new JCheckBox("drink");
drink.addItemListener(handler);
add(drink);
delivery = new JCheckBox("delivery");
delivery.addItemListener(handler);
add(delivery);
meatballs = new JCheckBox("meat balls");
meatballs.addItemListener(handler);
add(meatballs);
priceField = new JTextField("$", 15);
add(priceField);
button = new JButton("confirm order");
button.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
JOptionPane.showMessageDialog(null, "Your order has been placed.");
}
});
add(button);
}
//JTextField textField priceField
// JCheckBox pineApple, drink, delivery, meatballs;
public class EventHandler implements ItemListener {
double price = 0;
public void itemStateChanged(ItemEvent event) {
if (pineApple.isSelected()) { // if pineapple is selected add to the price
price = price + 2.30;
} else if (!pineApple.isSelected()){ // if pineapple is deselected subtract from price
price = price - 2.30;
}
if (delivery.isSelected()) {
price = price + 5;
} else if (!delivery.isSelected()) {
price = price - 5;
}
if (drink.isSelected()) {
price = price + 1;
} else if (!drink.isSelected()) {
price = price - 1;
}
if (meatballs.isSelected()) {
price = price + 1;
} else if (!meatballs.isSelected()) {
price = price - 1;
}
priceField.setText("$" + price);
}
}
}
你似乎在“假设”一个或多个项目在过去被选中,但你没有办法知道这是否是真的
相反,将price
重置为0
,并且只为当前实际选定的项目添加price
public void itemStateChanged(ItemEvent event) {
price = 0;
if (pineApple.isSelected()) {
price = price + 2.30;
}
if (delivery.isSelected()) {
price = price + 5;
}
if (drink.isSelected()) {
price = price + 1;
}
if (meatballs.isSelected()) {
price = price + 1;
}
priceField.setText("$" + price);
}
你似乎在“假设”一个或多个项目在过去被选中,但你没有办法知道这是否是真的
相反,将price
重置为0
,并且只为当前实际选定的项目添加price
public void itemStateChanged(ItemEvent event) {
price = 0;
if (pineApple.isSelected()) {
price = price + 2.30;
}
if (delivery.isSelected()) {
price = price + 5;
}
if (drink.isSelected()) {
price = price + 1;
}
if (meatballs.isSelected()) {
price = price + 1;
}
priceField.setText("$" + price);
}
您的代码从价格中减去价值。也就是说,当你选择“肉丸”时,它会给价格增加1,现在的价格是1美元 然后,当其他复选框被清除时,(您已经进行了编码,以便在复选框被清除时,它会减去相关值) 菠萝2.30美元,送货5.00美元,饮料1.00美元,(总共8.30美元)从价格中“扣除” 1-8.3=-7.3
这就是你得到负值的原因。你的代码从价格中减去值。也就是说,当你选择“肉丸”时,它会给价格增加1,现在的价格是1美元 然后,当其他复选框被清除时,(您已经进行了编码,以便在复选框被清除时,它会减去相关值) 菠萝2.30美元,送货5.00美元,饮料1.00美元,(总共8.30美元)从价格中“扣除” 1-8.3=-7.3
这就是为什么会得到负值。对任何项调用itemStateChanged()的方法是否已更改???@tinle if(true)else函数与if(true)else if(!true)函数相同。为什么这样写我是java新手,有什么更好的方法可以做到这一点?多么糟糕的布局混乱!用户未知你能告诉我一个更好的方法来演示这个问题吗,或者有什么方法可以让它不再是一个糟糕的布局?对任何项目调用itemStateChanged()方法吗?@tinle if(true)else函数与if(true)else if(!true)函数相同。你为什么这样写我是java新手,什么是更好的方法呢?多么糟糕的布局混乱!用户未知你能给我一个更好的方法来演示这个,或者让它不那么糟糕的布局吗?起初我是这样做的,但是如果你取消选择它,它会继续增加价格。注意方法中的第一行。每次调用该方法之前,我都会将
price
设置为0
。起初我是这样做的,但如果取消选择,它会继续添加到price中。请注意方法中的第一行。每次调用该方法时,在执行任何其他计算之前,我将price
设置为0
。