Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Action listener中进行算术计算_Java_User Interface - Fatal编程技术网

Java 如何在Action listener中进行算术计算

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

我应该制作一个gui,允许人们通过输入他们想要订购的食物数量来订购食物,然后显示物品的总价。 但是,我的代码行帮助计算餐费,它有一个错误,即“*”运算符未定义。我的.getText()使用是否正确?我怎么修理它?请随意指出我可以在编码方面改进的其他方面

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()