java Swing 计算器的实现:利用栈计算算术表达式中缀表达式结果

利用栈操作进行计算,栈s1存放数字数据,栈s2存放运算符数据,将表达式数组遍历,遇到数字入栈s1,遇到运算符,若运算符为"(",则入栈s2,否则遇到运算优先级大于s2栈顶元素时,入栈s2,否则出栈进行计算,计算时,将s1栈中出栈两个数字元素,与s2栈的栈顶运算符进行计算,并将计算结果存入s1栈,若遇到")",则出栈s2计算,直到遇到第一个"(",最后若栈s2不为空,则出栈计算直到栈空,最后将表达式结果存放在栈s1中,读取s1栈顶即得到表达式结果

class CounterGUI extends JFrame {
	JPanel topPanel;
	JPanel centerPanel;
	JTextArea textField;
	JScrollPane jsp;
	JButton button1;
	JButton button2;
	JButton button3;
	JButton button4;
	JButton button5;
	JButton button6;
	JButton button7;
	JButton button8;
	JButton button9;
	JButton button0;
	JButton buttonAdd;
	JButton buttonSub;
	JButton buttonMul;
	JButton buttonDiv;
	JButton buttonCle;
	JButton buttonDel;
	JButton buttonRes;
	JButton buttonPoi;
	JButton buttonLef;//左括号
	JButton buttonRig;//右括号
	String expression = "";//表达式   

	Font f = new Font("楷体", Font.BOLD, 30);
	Font f1 = new Font("黑体", Font.BOLD, 30);

	public CounterGUI() {
		setTitle("计算器");
		setBounds(100, 100, 550, 520);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		getContentPane().setLayout(null);
		topPanel = new JPanel();
		topPanel.setBounds(10, 10, 510, 50);
		topPanel.setLayout(new BorderLayout());

		textField = new JTextArea();
		textField.setFont(f);
		textField.setEditable(false);
		textField.setForeground(Color.white);
		textField.setBackground(Color.BLACK);
		// textField.setEnabled(false);
		jsp = new JScrollPane(textField);

		topPanel.add(jsp);

		centerPanel = new JPanel();
		centerPanel.setBounds(10, 70, 510, 400);
		centerPanel.setLayout(new GridLayout(4, 5));

		button1 = new JButton("1");
		button1.setFont(f1);
		button1.setBackground(Color.CYAN);
		button1.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String temp = textField.getText().trim();
				if (temp!=null&&!"".equals(temp)) {
					char last = temp.charAt(temp.length() - 1);
					if (')' == last) {
						expression += "* 1";
					} else {
						expression += "1";
					} 
					textField.append("1");
				}else if("".equals(temp)){
					textField.append("1");
					expression += "1";
					
				}
			}
		});

		button2 = new JButton("2");
		button2.setFont(f1);
		button2.setBackground(Color.CYAN);
		button2.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String temp = textField.getText().trim();
				if (temp!=null&&!"".equals(temp)) {
					char last = temp.charAt(temp.length() - 1);
					if (')' == last) {
						expression += "* 2";
					} else {
						expression += "2";
					} 
					textField.append("2");
				}else if("".equals(temp)){
					textField.append("2");
					expression += "2";
					
				}

			}
		});

		button3 = new JButton("3");
		button3.setFont(f1);
		button3.setBackground(Color.CYAN);
		button3.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String temp = textField.getText().trim();
				if (temp!=null&&!"".equals(temp)) {
					char last = temp.charAt(temp.length() - 1);
					if (')' == last) {
						expression += "* 3";
					} else {
						expression += "3";
					} 
					textField.append("3");
				}else if("".equals(temp)){
					textField.append("3");
					expression += "3";
					
				}

			}
		});

		button4 = new JButton("4");
		button4.setFont(f1);
		button4.setBackground(Color.CYAN);
		button4.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String temp = textField.getText().trim();
				if (temp!=null&&!"".equals(temp)) {
					char last = temp.charAt(temp.length() - 1);
					if (')' == last) {
						expression += "* 4";
					} else {
						expression += "4";
					} 
					textField.append("4");
				}else if("".equals(temp)){
					textField.append("4");
					expression += "4";
					
				}
			}
		});

		button5 = new JButton("5");
		button5.setFont(f1);
		button5.setBackground(Color.CYAN);
		button5.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String temp = textField.getText().trim();
				if (temp!=null&&!"".equals(temp)) {
					char last = temp.charAt(temp.length() - 1);
					if (')' == last) {
						expression += "* 5";
					} else {
						expression += "5";
					} 
					textField.append("5");
				}else if("".equals(temp)){
					textField.append("5");
					expression += "5";
					
				}
			}
		});

		button6 = new JButton("6");
		button6.setFont(f1);
		button6.setBackground(Color.CYAN);
		button6.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String temp = textField.getText().trim();
				if (temp!=null&&!"".equals(temp)) {
					char last = temp.charAt(temp.length() - 1);
					if (')' == last) {
						expression += "* 6";
					} else {
						expression += "6";
					} 
					textField.append("6");
				}else if("".equals(temp)){
					textField.append("6");
					expression += "6";
					
				}

			}
		});

		button7 = new JButton("7");
		button7.setFont(f1);
		button7.setBackground(Color.CYAN);
		button7.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String temp = textField.getText().trim();
				if (temp!=null&&!"".equals(temp)) {
					char last = temp.charAt(temp.length() - 1);
					if (')' == last) {
						expression += "* 7";
					} else {
						expression += "7";
					} 
					textField.append("7");
				}else if("".equals(temp)){
					textField.append("7");
					expression += "7";
					
				}
			}
		});

		button8 = new JButton("8");
		button8.setFont(f1);
		button8.setBackground(Color.CYAN);
		button8.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String temp = textField.getText().trim();
				if (temp!=null&&!"".equals(temp)) {
					char last = temp.charAt(temp.length() - 1);
					if (')' == last) {
						expression += "* 8";
					} else {
						expression += "8";
					} 
					textField.append("8");
				}else if("".equals(temp)){
					textField.append("8");
					expression += "8";
					
				}
			}
		});

		button9 = new JButton("9");
		button9.setFont(f1);
		button9.setBackground(Color.CYAN);
		button9.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String temp = textField.getText().trim();
				if (temp!=null&&!"".equals(temp)) {
					char last = temp.charAt(temp.length() - 1);
					if (')' == last) {
						expression += "* 9";
					} else {
						expression += "9";
					} 
					textField.append("9");
				}else if("".equals(temp)){
					textField.append("9");
					expression += "9";
					
				}
			}
		});

		button0 = new JButton("0");
		button0.setFont(f1);
		button0.setBackground(Color.CYAN);
		button0.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String temp = textField.getText().trim();
				if (temp!=null&&!"".equals(temp)) {
					char last = temp.charAt(temp.length() - 1);
					if (')' == last) {
						expression += "* 0";
					} else {
						expression += "0";
					} 
					textField.append("0");
				}else if("".equals(temp)){
					textField.append("0");
					expression += "0";
					
				}
			}
		});

		buttonAdd = new JButton("+");
		buttonAdd.setFont(f1);
		buttonAdd.setBackground(Color.CYAN);
		buttonAdd.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String temp = textField.getText().trim();
				if (temp!=null&&!"".equals(temp)) {
					char last = temp.charAt(temp.length() - 1);
					if (last == '+' || last == '-' || last == '*' || last == '/'|| last == '(') {
						
					} else {
						textField.append("+");
						expression += " + ";
					} 
				}

			}
		});

		buttonSub = new JButton("-");
		buttonSub.setFont(f1);
		buttonSub.setBackground(Color.CYAN);
		buttonSub.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String temp = textField.getText().trim();
				if (temp!=null&&!"".equals(temp)) {
					char last = temp.charAt(temp.length() - 1);
					if (last == '+' || last == '-' || last == '*' || last == '/'|| last == '(') {
						
					} else {
						textField.append("-");
						expression += " - ";
					} 
				}
			}
		});

		buttonMul = new JButton("*");
		buttonMul.setFont(f1);
		buttonMul.setBackground(Color.CYAN);
		buttonMul.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String temp = textField.getText().trim();
				if (temp!=null&&!"".equals(temp)) {
					char last = temp.charAt(temp.length() - 1);
					if (last == '+' || last == '-' || last == '*' || last == '/'|| last == '(') {
						
					} else {
						textField.append("*");
						expression += " * ";
					} 
				}
			}
		});

		buttonDiv = new JButton("/");
		buttonDiv.setFont(f1);
		buttonDiv.setBackground(Color.CYAN);
		buttonDiv.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String temp = textField.getText().trim();
				if (temp!=null&&!"".equals(temp)) {
					char last = temp.charAt(temp.length() - 1);
					if (last == '+' || last == '-' || last == '*' || last == '/'|| last == '(') {
						
					} else {
						textField.append("/");
						expression += " / ";
					} 
				}
			}
		});

		buttonDel = new JButton("DEL");
		buttonDel.setFont(f1);
		buttonDel.setBackground(Color.CYAN);
		buttonDel.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String first = textField.getText();
				if (first!=null&&!"".equals(first)) {
					int length = first.length();
					textField.setText(first.substring(0, length - 1));
				}
			}
		});

		buttonCle = new JButton("CLE");
		buttonCle.setFont(f1);
		buttonCle.setBackground(Color.CYAN);
		buttonCle.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				textField.setText("");
			}
		});

		buttonPoi = new JButton(".");
		buttonPoi.setFont(f1);
		buttonPoi.setBackground(Color.CYAN);
		buttonPoi.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String temp = textField.getText().trim();
				if (temp!=null&&!"".equals(temp)) {
					char last = temp.charAt(temp.length() - 1);
					if (last == '0' || last == '1' || last == '2' || last == '3' || last == '4' || last == '5'
							|| last == '6' || last == '7' || last == '8' || last == '9') {
						textField.append(".");
						expression += ".";
					} 
				}else if("".equals(temp)) {
					textField.append(".");
					expression += "0.";
				}
			}
		});

		buttonRes = new JButton("=");
		buttonRes.setFont(f1);
		buttonRes.setBackground(Color.CYAN);
		buttonRes.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				//TODO:判断括号是否匹配
				System.out.println(expression);
				float result = new Counter().calInfix(expression);
				textField.setText(""+result);
				expression="";
			}
		});
		buttonRes.addFocusListener(new FocusListener() {
			
			@Override
			public void focusLost(FocusEvent e) {
				textField.setText("");
			}
			
			@Override
			public void focusGained(FocusEvent e) {
				
			}
		});

		buttonRig = new JButton(")");
		buttonRig.setFont(f1);
		buttonRig.setBackground(Color.CYAN);
		buttonRig.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String temp = textField.getText().trim();
				if (temp!=null&&!"".equals(temp)) {
					char last = temp.charAt(temp.length() - 1);
					if (last == '+' || last == '-' || last == '*' || last == '/') {
						
					} else {
						textField.append(")");
						expression += " ) ";
					} 
				}
			}
		});

		buttonLef = new JButton("(");
		buttonLef.setFont(f1);
		buttonLef.setBackground(Color.CYAN);
		buttonLef.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String temp = textField.getText().trim();
				if (temp!=null&&!"".equals(temp)) {
					char last = temp.charAt(temp.length() - 1);
					if (last == '+' || last == '-' || last == '*' || last == '/') {
						textField.append("(");
						expression += "( ";
					} else if(last == '0'||last == '1'||last == '2'||last == '3'||last == '4'||last == '5'||last == '6'||last == '7'||last == '8'||last == '9'){
						textField.append("(");
						expression += " * ( ";
					} else {
						
					}
				}else if("".equals(temp)) {
					textField.append("(");
					expression += "( ";
				}
			}
		});

		centerPanel.add(button7);
		centerPanel.add(button8);
		centerPanel.add(button9);
		centerPanel.add(buttonAdd);
		centerPanel.add(buttonRig);
		centerPanel.add(button4);
		centerPanel.add(button5);
		centerPanel.add(button6);
		centerPanel.add(buttonSub);
		centerPanel.add(buttonLef);
		centerPanel.add(button1);
		centerPanel.add(button2);
		centerPanel.add(button3);
		centerPanel.add(buttonMul);
		centerPanel.add(buttonDel);
		centerPanel.add(button0);
		centerPanel.add(buttonPoi);
		centerPanel.add(buttonRes);
		centerPanel.add(buttonDiv);
		centerPanel.add(buttonCle);

		getContentPane().add(topPanel);
		getContentPane().add(centerPanel);

		setVisible(true);
	}

猜你喜欢

转载自blog.csdn.net/bright_light12345/article/details/81032591