Java写计算器但是只能实现两个数据运算如何让更多数据实现运算?

import javax.swing.*;
import java.awt.*;
import java.util.Currency;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
public
 class Calculator {

            public static void gui() {
                //窗口定义
                JFrame frame = new JFrame("计算机");
                Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
                frame.setLayout(new BorderLayout());
                frame.setSize(((int)screenSize.getHeight()/2)+20,((int)screenSize.getWidth()/4)+50);
                frame.setLocation((int)screenSize.getWidth()/4,(int)screenSize.getHeight()/4);
                frame.setVisible(true);

                //面板定义
                JPanel panel1 = new JPanel();
                JPanel panel2 = new JPanel();
                JPanel panel3 = new JPanel();
                JPanel panel4 = new JPanel();
                //JScrollPane scrollPane = new JScrollPane();
                Box box = Box.createVerticalBox();

                //布局定义及设置
                //scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
                panel1.setLayout(new FlowLayout());
                panel2.setLayout(new GridLayout(4, 4,5,5));
                panel3.setLayout(new FlowLayout());
                //panel4.setLayout(new FlowLayout());

                //组件定义
                JLabel label1 = new JLabel("计算结果");
                JTextArea textArea = new JTextArea(2,20);
                JTextArea textArea1= new JTextArea(3,43);
                textArea1.setEditable(false);
                textArea.setEditable(false);
                JTextField textField = new JTextField(10);


        /*

            //循环定义数字按钮

        for(int i=0;i<10;i++) {
            JButton button = new JButton(String.valueOf(i));
            panel2.add(button);
        }
        */

                JButton button = new JButton("归零");

                JButton button0 = new JButton("0");
                JButton button1 = new JButton("1");
                JButton button2 = new JButton("2");
                JButton button3 = new JButton("3");
                JButton button4 = new JButton("4");
                JButton button5 = new JButton("5");
                JButton button6 = new JButton("6");
                JButton button7 = new JButton("7");
                JButton button8 = new JButton("8");
                JButton button9 = new JButton("9");

                JButton button1_1 = new JButton("+");
                JButton button1_2 = new JButton("-");
                JButton button1_3 = new JButton("×");
                JButton button1_4 = new JButton("÷");
                JButton button1_5 = new JButton("=");
                JButton button1_6 = new JButton(".");


                //组件布局
                panel1.add(textArea);
                panel1.add(label1);
                panel1.add(textField);
                panel1.add(button);

                panel2.add(button7);    //添加按钮
                panel2.add(button8);
                panel2.add(button9);
                panel2.add(button1_4);
                panel2.add(button4);
                panel2.add(button5);
                panel2.add(button6);
                panel2.add(button1_3);
                panel2.add(button1);
                panel2.add(button2);
                panel2.add(button3);
                panel2.add(button1_2);
                panel2.add(button0);
                panel2.add(button1_6);
                panel2.add(button1_5);
                panel2.add(button1_1);

                panel4.add(textArea1);

        /*
        box.add(button1);
        box.add(Box.createVerticalStrut(20));
        box.add(button2);
        box.add(Box.createVerticalStrut(20));
        box.add(button3);
        box.add(Box.createVerticalStrut(20));
        box.add(button4);

        panel3.add(box);

        panel4.add(Box.createHorizontalStrut(50));

         */



                panel1.setVisible(true);
                panel2.setVisible(true);
                panel4.setVisible(true);

                frame.add(panel1,BorderLayout.NORTH);
                frame.add(panel2,BorderLayout.CENTER);
                frame.add(panel4,BorderLayout.SOUTH);
                //frame.add(panel3,BorderLayout.EAST);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                //功能设计

                //结果寄存器
                AtomicReference<Double> y = new AtomicReference<>((double) 0);

                //计算寄存器
                AtomicReference<Double> p2 = new AtomicReference<>((double) 0);
                AtomicReference<Double> p4=new AtomicReference<>((double) 0);

                //运算符标识器
                AtomicInteger i = new AtomicInteger();




                //数字区
                AtomicBoolean x = new AtomicBoolean(true);
                //小数点计数器

                button0.addActionListener(e -> {
                    textArea.append("0");
                    textArea1.append("0");
                });
                button1.addActionListener(e -> {
                    textArea.append("1");
                    textArea1.append("1");
                });
                button2.addActionListener(e -> {
                    textArea.append("2");
                    textArea1.append("2");
                });
                button3.addActionListener(e -> {
                    textArea.append("3");
                    textArea1.append("3");
                });
                button4.addActionListener(e -> {
                    textArea.append("4");
                    textArea1.append("4");
                });
                button5.addActionListener(e -> {
                    textArea.append("5");
                    textArea1.append("5");
                });
                button6.addActionListener(e -> {
                    textArea.append("6");
                    textArea1.append("6");
                });
                button7.addActionListener(e -> {
                    textArea.append("7");
                    textArea1.append("7");
                });
                button8.addActionListener(e -> {
                    textArea.append("8");
                    textArea1.append("8");
                });
                button9.addActionListener(e -> {
            textArea.append("9");
            textArea1.append("9");
        });

        button1_6.addActionListener(e -> {
            if(x.get()){
                textArea.append(".");
                textArea1.append(".");
            }
            else{
                JOptionPane.showMessageDialog(frame, "小数点错误");
            }
            x.set(false);
        });//小数点


        //计算区
        button1_1.addActionListener(e -> {
            textArea1.append("+");
            String p1 = textArea.getText();
            p2.set(Double.parseDouble(p1));
            textArea.setText("");
            i.set(1);


        });
        //+

        button1_2.addActionListener(e -> {
            textArea1.append("-");
            String p1 = textArea.getText();
            p2.set(Double.parseDouble(p1));
            textArea.setText("");
            i.set(2);

        });
        //-

        button1_3.addActionListener(e -> {
            textArea1.append("×");
            String p1 = textArea.getText();
            p2.set(Double.parseDouble(p1));
            textArea.setText("");
            i.set(3);

        });
        //X

        button1_4.addActionListener(e -> {
            textArea1.append("÷");
            String p1 = textArea.getText();
            p2.set(Double.parseDouble(p1));
            textArea.setText("");
            i.set(4);

        });
        ///




        //结果区
        button1_5.addActionListener(e -> {
            textArea1.append("=");
            String p3 = textArea.getText();
            p4.set(Double.parseDouble(p3));
           // y.set(p2.get()+p4.get());


            switch (i.get()){
                case 1:y.set(p2.get() + p4.get());break;
                case 2:y.set(p2.get() - p4.get());break;
                case 3:y.set(p2.get() * p4.get());break;
                case 4:y.set(p2.get() / p4.get());break;
                default:break;
            }
            textArea1.append(String.valueOf(y.get()));
            textArea1.append("\n");
            textArea.setText("");
            textField.setText(String.valueOf(y.get()));

        });//显示并初始化


        //归零区
        button.addActionListener(e -> {
            textArea.setText("");
            textField.setText("");
        });

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(Calculator::gui);
    }
}

把计算后的结果用全局变量存放起来。这个逻辑问题,你可以网上百度简易计算器,看下里面的逻辑,一般都会有支持连续计算的。

完整计算器代码:

package T7;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Calc extends JFrame implements ActionListener,KeyListener{

	JTextField txtResult;
	JButton btn0,btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9;
	JButton btnAdd,btnSub,btnTimes,btnDiv,btnEquals,btnDot;
	JButton btnClear,btnExit;
	JPanel centerPanel,southPanel;
	double num1=0,num2=0,result=0;
	String opr= "+";
	public Calc() {
		setTitle("计算器2016");
		txtResult = new JTextField("0.0");
		//只读
//		txtResult.setEditable(false);
		
		centerPanel = new JPanel(new GridLayout(4,4,5,5));
		southPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
		add(txtResult,BorderLayout.NORTH);
		txtResult.addKeyListener(this);
		add(centerPanel);
		btn0 = new JButton("0");
		btn1 = new JButton("1");
		btn2 = new JButton("2");
		btn3 = new JButton("3");
		btn4 = new JButton("4");
		btn5 = new JButton("5");
		btn6 = new JButton("6");
		btn7 = new JButton("7");
		btn8 = new JButton("8");
		btn9 = new JButton("9");
		btnAdd = new JButton("+");
		btnSub = new JButton("-");
		btnTimes = new JButton("*");
		btnDiv = new JButton("/");
		btnDot = new JButton(".");
		btnEquals = new JButton("=");
		centerPanel.add(btn7);
		centerPanel.add(btn8);
		centerPanel.add(btn9);
		centerPanel.add(btnDiv);
		centerPanel.add(btn4);
		centerPanel.add(btn5);
		centerPanel.add(btn6);
		centerPanel.add(btnTimes);
		centerPanel.add(btn1);
		centerPanel.add(btn2);
		centerPanel.add(btn3);
		centerPanel.add(btnSub);
		centerPanel.add(btn0);
		centerPanel.add(btnDot);
		centerPanel.add(btnEquals);
		centerPanel.add(btnAdd);
		
		
		
		add(southPanel,BorderLayout.SOUTH);
		btnClear = new JButton("清除");
		btnExit = new JButton("关闭");
		southPanel.add(btnClear);
		southPanel.add(btnExit);
		
		//监听
		btn0.addActionListener(this);
		btn1.addActionListener(this);
		btn2.addActionListener(this);
		btn3.addActionListener(this);
		btn4.addActionListener(this);
		btn5.addActionListener(this);
		btn6.addActionListener(this);
		btn7.addActionListener(this);
		btn8.addActionListener(this);
		btn9.addActionListener(this);
		btnAdd.addActionListener(this);
		btnSub.addActionListener(this);
		btnTimes.addActionListener(this);
		btnDiv.addActionListener(this);
		btnDot.addActionListener(this);
		btnEquals.addActionListener(this);
		btnClear.addActionListener(this);
		btnExit.addActionListener(this);
		
		
		setSize(300, 300);
		setVisible(true);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
	}
	public static void main(String[] args) {
		new Calc();
	}
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==btnClear){
			txtResult.setText("0");
		}else if(e.getSource()==btnExit){
			System.exit(0);
		}else if(e.getSource()==btn0){
			setText("0");
		}else if(e.getSource()==btn1){
			setText("1");
		}else if(e.getSource()==btn2){
			setText("2");
		}else if(e.getSource()==btn3){
			setText("3");
		}else if(e.getSource()==btn4){
			setText("4");
		}else if(e.getSource()==btn5){
			setText("5");
		}else if(e.getSource()==btn6){
			setText("6");
		}else if(e.getSource()==btn7){
			setText("7");
		}else if(e.getSource()==btn8){
			setText("8");
		}else if(e.getSource()==btn9){
			setText("9");
		}else if(e.getSource()==btnDot){
			setText(".");
		}else if(e.getSource()==btnAdd){
			opr = "+";
			operator();
			//清空内容
			txtResult.setText("");
		}else if(e.getSource()==btnSub){
			opr = "-";
			operator();
			//清空内容
			txtResult.setText("");
		}else if(e.getSource()==btnTimes){
			opr = "*";
			operator();
			//清空内容
			txtResult.setText("");
		}else if(e.getSource()==btnDiv){
			opr = "/";
			operator();
			//清空内容
			txtResult.setText("");
		}else if(e.getSource()==btnEquals){
			operator();
			txtResult.setText(result+"");
			num1=num2=result=0;
		}
		
	}
	public void setText(String s){
		//获取文本框的值
		String str = txtResult.getText().trim();
		//如果文本框里面的值是0,那么初始化为空值
		if(str.equals("" ) || Double.parseDouble(str)==0){
			str = "";
		}
		str += s;
		//设置文本框的值
		txtResult.setText(str);
	}
	public void operator(){
		if(txtResult.getText().equals("")){
			num1=0;
		}else{
			num1 = Double.parseDouble(txtResult.getText().trim());
		}
		System.out.println("num1="+num1+";num2="+num2);
		if(opr.equals("+")){
			result = num1+num2;
		}else if(opr.equals("-")){
			result = num2-num1;
		}else if(opr.equals("*")){
			result = num1*num2;
		}else if(opr.equals("/")){
			result = num2/num1;
		}
		num2=num1;
	}
	String m_temp;
	public void keyPressed(KeyEvent e) {
		m_temp = txtResult.getText();
		
		
	}
	public void keyReleased(KeyEvent e) {
		try{
			Double.parseDouble(txtResult.getText());
		}catch(Exception ex){
			txtResult.setText(m_temp);
		}
	}
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}
}

 

您的问题已经有小伙伴解答了,请点击【采纳】按钮,采纳帮您提供解决思路的答案,给回答的人一些鼓励哦~~

ps:开通问答VIP,享受5次/月 有问必答服务,了解详情↓↓↓

【电脑端】戳>>>  https://vip.csdn.net/askvip?utm_source=1146287632
【APP 】  戳>>>  https://mall.csdn.net/item/52471?utm_source=1146287632