简单的计算器程序(摘自java核心技术.卷I)

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class Calculator
{
   public static void main(String[] args)
   {
      EventQueue.invokeLater(new Runnable()
         {
            public void run()
            {
               CalculatorFrame frame = new CalculatorFrame();
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
            }
         });
   }
}


/**
 * A frame with a calculator panel.
 */
class CalculatorFrame extends JFrame
{
	public CalculatorFrame()
	{
		setTitle("Calculator");
		CalculatorPanel panel=new CalculatorPanel();
		add(panel);
		pack();
	}
}


class CalculatorPanel extends JPanel
{
	private JButton display;
	   private JPanel panel;
	   private double result;
	   private String lastCommand;
	   private boolean start;
	public CalculatorPanel()
	{
		setLayout(new BorderLayout());
		
		result=0;
		lastCommand="=";
		start=true;
		
		 // add the display
		display=new JButton("0");
		display.setEnabled(false);
		add(display,BorderLayout.NORTH);
		
		ActionListener insert=new InsertAction();
		ActionListener command=new CommandAction();
		
		panel=new JPanel();
		panel.setLayout(new GridLayout(4,4));
		
		  addButton("7", insert);
	      addButton("8", insert);
	      addButton("9", insert);
	      addButton("/", command);


	      addButton("4", insert);
	      addButton("5", insert);
	      addButton("6", insert);
	      addButton("*", command);


	      addButton("1", insert);
	      addButton("2", insert);
	      addButton("3", insert);
	      addButton("-", command);


	      addButton("0", insert);
	      addButton(".", insert);
	      addButton("=", command);
	      addButton("+", command);


	      add(panel, BorderLayout.CENTER);
		
		}
	private void addButton(String label,ActionListener listener)
	{
		JButton button=new JButton(label);
		button.addActionListener(listener);
		panel.add(button);
	}
	/**
	    * This action inserts the button action string to the end of the display text.
	    */
	private class InsertAction implements ActionListener
	{
		public void actionPerformed(ActionEvent event)
		{
			String input=event.getActionCommand();
			if(start)
			{
				display.setText("");
				start=false;
			}
			display.setText(display.getText()+input);
		}
	}
	 /**
	    * This action executes the command that the button action string denotes.
	    */
	private class CommandAction implements ActionListener
	{
		public void actionPerformed(ActionEvent event)
		{
			String command=event.getActionCommand();
			if(start)
			{
				if (command.equals("-"))
	            {
	               display.setText(command);
	               start = false;
	            }
				else lastCommand = command;
			}else {
				calculate(Double.parseDouble(display.getText()));
				lastCommand=command;
				start=true;
			}
		}
	}
	/**
	    * Carries out the pending calculation.
	    * @param x the value to be accumulated with the prior result.
	    */
	public void calculate(double x)
	{
		 if (lastCommand.equals("+")) result += x;
	      else if (lastCommand.equals("-")) result -= x;
	      else if (lastCommand.equals("*")) result *= x;
	      else if (lastCommand.equals("/")) result /= x;
	      else if (lastCommand.equals("=")) result = x;
	      display.setText("" + result);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值