Java 如何在Action listener中进行算术计算
我应该制作一个gui,允许人们通过输入他们想要订购的食物数量来订购食物,然后显示物品的总价。 但是,我的代码行帮助计算餐费,它有一个错误,即“*”运算符未定义。我的.getText()使用是否正确?我怎么修理它?请随意指出我可以在编码方面改进的其他方面Java 如何在Action listener中进行算术计算,java,user-interface,Java,User Interface,我应该制作一个gui,允许人们通过输入他们想要订购的食物数量来订购食物,然后显示物品的总价。 但是,我的代码行帮助计算餐费,它有一个错误,即“*”运算符未定义。我的.getText()使用是否正确?我怎么修理它?请随意指出我可以在编码方面改进的其他方面 import java.awt.BorderLayout; import java.awt.Color; import java.awt.ComponentOrientation; import java.awt.Font; import jav
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.ComponentOrientation;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class LunchGUI implements ActionListener {
static JFrame frame;
static JPanel topPanel,panel;
static JLabel adult,kid,salad,dessert,price;
static JTextField adultq,kidq,saladq,dessertq;
static JButton confirm;
public static void main(String []args) {
Font font = new Font("Courier", Font.BOLD,24);
Color Color = new Color(249,206,188);
frame = new JFrame("Lunch Menu");
//define a new layout
frame.setLayout(new BorderLayout());
//panel for label
topPanel = new JPanel();
panel = new JPanel();
panel.setBackground(Color);
topPanel.setBackground(Color);
panel.setLayout(new GridLayout(5, 2, 0, 20));
panel.setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
panel.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
adult = new JLabel(" Adult Lunch Set $20 Quantity :");
adult.setFont(font);
adult.setBackground(java.awt.Color.CYAN);
adult.setOpaque(true);
adultq = new JTextField ("0");
adultq.setFont(font);
adultq.setBackground(java.awt.Color.CYAN);
adultq.setOpaque(true);
kid = new JLabel(" Kids Lunch Set $12 Quantity :");
kid.setFont(font);
kid.setBackground(java.awt.Color.CYAN);
kid.setOpaque(true);
kidq = new JTextField ("0");
kidq.setFont(font);
kidq.setBackground(java.awt.Color.CYAN);
kidq.setOpaque(true);
salad = new JLabel(" Salad Side $4 Quantity :");
salad.setFont(font);
salad.setBackground(java.awt.Color.CYAN);
salad.setOpaque(true);
saladq = new JTextField ("0");
saladq.setFont(font);
saladq.setBackground(java.awt.Color.CYAN);
saladq.setOpaque(true);
dessert = new JLabel(" Dessert $5 Quantity :");
dessert.setFont(font);
dessert.setBackground(java.awt.Color.CYAN);
dessert.setOpaque(true);
dessertq = new JTextField ("0");
dessertq.setFont(font);
dessertq.setBackground(java.awt.Color.CYAN);
dessertq.setOpaque(true);
confirm = new JButton("Confirm");
confirm.setFont(font);
confirm.setBackground(java.awt.Color.CYAN);
confirm.setOpaque(true);
JLabel label = new JLabel("What would you like to order?");
label.setFont(font);
JLabel price = new JLabel("2323");
price.setFont(font);
price.setBackground(Color);
price.setOpaque(true);
panel.add(adult);
panel.add(adultq);
panel.add(kid);
panel.add(kidq);
panel.add(salad);
panel.add(saladq);
panel.add(dessert);
panel.add(dessertq);
panel.add(confirm);
panel.add(price);
topPanel.add(label);
topPanel.setSize(200, 30);
//rearrange panels on frame
frame.add(topPanel, BorderLayout.NORTH);
frame.add(panel, BorderLayout.CENTER);
frame.setSize(1000, 800);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
confirm.addActionListener(new LunchGUI());
}
@Override
public void actionPerformed(ActionEvent e) {
String adultamt = adultq.getText();
String kidamt = kidq.getText();
String saladamt = saladq.getText();
String dessertamt = dessertq.getText();
String total = (20*adultamt)+(14*kidamt)+(4*saladamt)+(5*dessertamt);
price.setText(total);
}
}
这里的问题是,您试图使用字符串来计算总数,这是行不通的。在Java中,只能使用固定的算术数据类型(例如int、double等)进行这些算术计算。因此,在计算之前需要做的是将
.getText()
检索到的字符串解析为int值
int adultamt = Integer.parseInt(adultq.getText());
然后计算总数并将其解析回字符串
int total = (20 * adultamt) + ....;
price.setText(String.valueOf(total));
不能将字符串值相乘。您需要像这样更改数据类型:
int adultamt = Integer.parseInt(adultq.getText());
.
.
int dessertamt = Integer.parseInt(dessertq.getText());
int total = adult + .. + dessertamt;
price.setText(String.valueOf(total));
您正在尝试将字符串相乘。试着乘以一个数字。嗨,谢谢你的帮助!但是对于行price.setText(total.toString());出现一个错误,说明无法对基元类型int调用toString()。我可以做些什么来修复它?很抱歉给您带来麻烦,因为我还不熟悉编程。这是我的错误,我更新了响应以修复它。使用String.valueOf(total)获取整数的正确字符串表示形式。不客气。如果您还有其他问题,请随时提问。谢谢。显然,我现在面临一个新的运行时错误,指出线程“AWT-EventQueue-0”java.lang.NullPointerException中存在异常。如何修复它并使程序正常运行?NullPointerException表示您试图访问对象,但访问的字段为null。要找出导致错误的原因,您需要更深入地查看异常,它会将您指向错误发生的位置。您好,谢谢您的帮助!但是对于行price.setText(total.toString());出现一个错误,说明无法对基元类型int调用toString()。我可以做些什么来修复它?很抱歉给您添麻烦,因为我还不熟悉编程。我的坏习惯。valueOf(total)而不是toString()