⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculator.java.bak

📁 一个简单的计算器
💻 BAK
字号:
/*Java lab exp4
 *mxr@software.hit class 5  2004-11-13   10:12
 *MutilpTable.java
 *using java.awt and javax.swing pakage
 <applet code=Calculator.class height=200  width=200>
 </applet>
 */


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.awt.event.KeyEvent;



public class Calculator extends Applet implements ActionListener, KeyListener
{

final int MAX_INPUT_LENGTH = 17;


final int INPUT_MODE = 0;
final int RESULT_MODE = 1;
final int ERROR_MODE = 2;
int displayMode;


TextField displaytext;


boolean clearOnNextDigit;


double lastNumber;

char lastOperator;
public void init() 
 {
  
  Calculator calPanel = new Calculator(); 
  add("Center",calPanel); 
 } 
  public Calculator ()
	{
	super();
	setLayout(new BorderLayout());
	JPanel container = new JPanel();
	container.setLayout(new BorderLayout());
	JPanel buttonPanel = new JPanel();

	JPanel numberPanel = new JPanel();
	numberPanel.setLayout(new GridLayout(4, 4));	

	addButtonToPanel (numberPanel, new JButton("7"));
	addButtonToPanel (numberPanel, new JButton("8"));
	addButtonToPanel (numberPanel, new JButton("9"));
    addButtonToPanel (numberPanel, new JButton("/"));
	addButtonToPanel (numberPanel, new JButton("4"));
	addButtonToPanel (numberPanel, new JButton("5"));
    addButtonToPanel (numberPanel, new JButton("6"));
    addButtonToPanel (numberPanel, new JButton("*"));
	addButtonToPanel (numberPanel, new JButton("1"));
	addButtonToPanel (numberPanel, new JButton("2"));
	addButtonToPanel (numberPanel, new JButton("3"));
    addButtonToPanel (numberPanel, new JButton("-"));
	addButtonToPanel (numberPanel, new JButton("."));
	addButtonToPanel (numberPanel, new JButton("0"));
	addButtonToPanel (numberPanel, new JButton("="));
    addButtonToPanel (numberPanel, new JButton("+"));
	buttonPanel.add(numberPanel);
	
	JPanel controlPanel = new JPanel();
    controlPanel.setLayout(new BorderLayout()); 
    addButtonToPanel (controlPanel, new JButton("BACK"),0);
	addButtonToPanel (controlPanel, new JButton("+/-"),3);
	addButtonToPanel (controlPanel, new JButton("AC"),3);
	addButtonToPanel (controlPanel, new JButton("C"),2);
    	
	

	displaytext = new TextField("");
    displayResult(0);
    addKeyListener(this);
   	controlPanel.add(displaytext,BorderLayout.NORTH);
   /*container.add(controlPanel,BorderLayout.NORTH);

   	container.add(buttonPanel, BorderLayout.CENTER);
   	add("Center",container);*/
	JPanel p = new JPanel();
	p.setLayout(new BorderLayout());
	p.add(buttonPanel,BorderLayout.SOUTH);
	p.add(controlPanel,BorderLayout.NORTH);
	container.add(p);
	add("Center",container);
      
    p.requestFocus();
	//controlPanel.requestFocus();
   // displaytex.requestFocus();

	
	clearAll();
	}
 

void setDisplayString(String s)
	{
	displaytext.setText(s);
	}


String getDisplayString ()
	{
	return displaytext.getText();
	}


void clearAll()
	{
	setDisplayString("0");
	lastOperator = 0;
	lastNumber = 0;
	displayMode = INPUT_MODE;
	clearOnNextDigit = true;
	}


void clearLastEntry()
	{
	setDisplayString("0");
	clearOnNextDigit = true;
	displayMode = INPUT_MODE;
	}


void displayResult(double result)
	{
	setDisplayString(Double.toString(result));
	lastNumber = result;
	displayMode = RESULT_MODE;
	clearOnNextDigit = true;
	}


void displayError(String errorMessage)
	{
	setDisplayString(errorMessage);
	lastNumber = 0;
	displayMode = ERROR_MODE;
	clearOnNextDigit = true;
	}


void addButtonToPanel(JPanel panel, JButton button)
	{
	panel.add(button);
	button.addKeyListener(this);
	button.addActionListener(this);
	}
void addButtonToPanel(JPanel panel, JButton button ,int side)
    {
        if(side==0)
        {
            panel.add(button,BorderLayout.WEST);
        }
        
        if(side==1)
        {
            panel.add(button,BorderLayout.NORTH);
        }
        if(side==2)
        {
            panel.add(button,BorderLayout.EAST);
        }
        if(side==3)
        {
            panel.add(button,BorderLayout.CENTER);
        }
       
    button.addKeyListener(this);
    button.addActionListener(this);
    }


public void actionPerformed (ActionEvent e)
	{
	processButton(e.getActionCommand());	
	}


void processButton(String command) 
	{
	if (command.equals("0")) addDigit(0);
	if (command.equals("1")) addDigit(1);
	if (command.equals("2")) addDigit(2);
	if (command.equals("3")) addDigit(3);
	if (command.equals("4")) addDigit(4);
	if (command.equals("5")) addDigit(5);
	if (command.equals("6")) addDigit(6);
	if (command.equals("7")) addDigit(7);
	if (command.equals("8")) addDigit(8);
	if (command.equals("9")) addDigit(9);
	if (command.equals(".")) addDecimalPoint();
	if (command.equals("*")) processOperator('*');
	if (command.equals("-")) processOperator('-');
	if (command.equals("/")) processOperator('/');
	if (command.equals("+")) processOperator('+');
	if (command.equals("=")) processEquals();
	if (command.equals("+/-")) processSignChange();
	if (command.equals("AC")) clearAll();
	if (command.equals("C")) clearLastEntry();
	if (command.equals("BACK")) clearnext();
	{
	}
	}

void clearnext()
	{
	    String in = getDisplayString();
		in = displaytext.getText();
        in = in.substring(0,in.length()-1);
        displaytext.setText(in);
	}

double getNumberInDisplay()
	{
	String input = displaytext.getText();
	return Double.parseDouble(input);
	}


double processLastOperator() throws DivideByZeroException
	{
	double result = 0;
	double numberInDisplay = getNumberInDisplay();
	switch (lastOperator)
		{
		case '*':
			result = lastNumber * numberInDisplay;
			break;
		case '+':
			result = lastNumber + numberInDisplay;
			break;
		case '-':
			result = lastNumber - numberInDisplay;
			break;
		case '/':
			if (numberInDisplay == 0)
				throw (new DivideByZeroException());
			result = lastNumber / numberInDisplay;
			break;
		}		
	return result;
	}	


void processOperator(char op) 
	{
	if (displayMode != ERROR_MODE)
		{
		double numberInDisplay = getNumberInDisplay();
		if (lastOperator != 0)	
			{
			try
				{
				double result = processLastOperator();
				displayResult(result);
				lastNumber = result;
				}
			catch (DivideByZeroException e)
				{
				displayError("Division by zero!");
				}
			}
		else
			{
			lastNumber = numberInDisplay;
			}
		clearOnNextDigit = true;
		lastOperator = op;
		}
	}



void processEquals()
	{
	if (displayMode != ERROR_MODE)
		{
		try
			{
			double result = processLastOperator();
			displayResult(result);
			}
		catch (DivideByZeroException e)
			{
			displayError("Division by zero!");
			}
		lastOperator = 0;
		}
	}


void processSignChange()
	{
	if (displayMode == INPUT_MODE)
		{
		String input = getDisplayString();
		if (input.length() > 0)
			{
			if (input.indexOf("-") == 0)
				setDisplayString(input.substring(1));
			else
				setDisplayString("-" + input);
			}
		}
	else if (displayMode == RESULT_MODE)
		{
		double numberInDisplay = getNumberInDisplay();
		if (numberInDisplay != 0)
			displayResult(-numberInDisplay);
		}
	}



void addDigit(int digit)
	{
	if (clearOnNextDigit)
		setDisplayString("");
	String inputString = getDisplayString();
	if ((!inputString.equals("0") || digit > 0)  && inputString.length() < MAX_INPUT_LENGTH)
		{
		setDisplayString(inputString + digit);
		}
	displayMode = INPUT_MODE;
	clearOnNextDigit = false;
	}


void addDecimalPoint()
	{
	displayMode = INPUT_MODE;
	if (clearOnNextDigit)
		setDisplayString("");
	String inputString = getDisplayString();

	
	if (inputString.indexOf(".") < 0)
		setDisplayString(new String(inputString + "."));
	}


public void keyPressed(KeyEvent e)
	{
	}


public void keyReleased(KeyEvent e)
	{
	}


public void keyTyped(KeyEvent e)
	{
	String command;
	char keyChar = e.getKeyChar();
	if (keyChar == KeyEvent.VK_BACK_SPACE) 
	   {
		command = new String("BACK");
	   }
	else if (keyChar == KeyEvent.VK_ENTER)
		{
		command = new String("=");
		}
	else if (keyChar == KeyEvent.VK_ESCAPE)
		{
		command = new String("C");
		}
	else
		{
		byte bytes[] = {(byte)keyChar};
		command = new String(bytes);
		}
	processButton(command);
	}
public static void main(String args[]) 
	{
	NFrame frame = new NFrame();
	Container conTainer;
	conTainer = frame.getContentPane();
    
	conTainer.setLayout (new BorderLayout());
	Calculator calculator = new Calculator();
	calculator.init();
	calculator.start();
	conTainer.add("Center",calculator);
	
 	frame.setTitle("Calcutator");
 	 	
 	frame.setSize(200, 200);
    frame.setVisible(true); 
	}
	
	

}



class DivideByZeroException extends Exception
	{
	DivideByZeroException()
		{
		super("Divide by zero");
		}
	}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -