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

📄 simplecalculator.java.bak

📁 java制作的计算器小程序
💻 BAK
📖 第 1 页 / 共 2 页
字号:
		//如果按下的是清空键
		if (event == buttonC)
		{
			reSet();
		}


		//如果按下的是正负标志键
		if (event == buttonSign)
		{
			if (result!=0)
			{
				result*=-1;
				textBuffer=new StringBuffer(Double.toString(result));
				AddNum();
				showScreenValue();
			}
		}


		//如果按下的是加法键
		if (event == buttonAdd)	AddFunction(1);

		//如果按下的是减法键
		if (event == buttonSub)	AddFunction(2);

		//如果按下的是乘法键
		if (event == buttonMul)	AddFunction(3);

		//如果按下的是除法键
		if (event == buttonDiv)	AddFunction(4);

		//如果按下的是等号键
		if (event == buttonEqual) OnGo();

		//如果按下的是根号键
		if (event == buttonSqrt)
		{
			if (result < 0)
			{
				answerText.setText("负数不能开根号");
			}
			else
			{
				result = Math.sqrt(result);
				showScreenValue();
				b_remFir = true;	remFir = result;
				enterSecond = false;	forFirOrSec = 2;
			}
		}


		//如果按下的是百分号键
		if (event == buttonMod)
		{
			result /= 100;
			showScreenValue();
			b_remFir = true;	remFir = result;
			enterSecond = false;	forFirOrSec = 2;
		}

		//如果按下的是倒数键
		if (event == buttonReciprocal)
		{
			result = 1/result;
			showScreenValue();
			b_remFir = true;	remFir = result;
			enterSecond = false;	forFirOrSec = 2;
		}


		//内存键操作部分
		//如果按下的是MC键
		if (event == buttonMC)
		{
			memory = 0;
			memoryState.setText("");
		}

		//如果按下的是MR键
		if (event == buttonMR)
		{
			//若memory值为整数,怎把小数点后的零给去掉。
			int resInteger = (int)memory;
			if ( Math.abs(memory-resInteger) == 0 )
			{
				StringBuffer tmp = new StringBuffer(Double.toString(memory));
				tmp.deleteCharAt(tmp.length()-1);
				answerText.setText(tmp.toString());
			}
			else answerText.setText(Double.toString(memory));
			if (isNumGroup == true)
			{
				showNumGroup();
			}
		}

		//如果按下的是MS键
		if (event == buttonMS)
		{
			memory = Double.parseDouble(textBuffer.toString());
			memoryState.setText("M");
		}

		//如果按下的是M+键
		if (event == buttonMADD)
		{
			memory += Double.parseDouble(textBuffer.toString());
		}

		//如果按下的是关于计算器键
		if (event == aboutCal)
		{
			JOptionPane jop = new JOptionPane();
			jop.showMessageDialog(mainFrame,"计算器1.00版\n开发者:胡勇健");
		}

	}//End actionPerformed(ActionEvent e)

	/*
	 * itemStateChanged(ItemEvent e) 时为菜单项添加相应的属性
	 */
	public void itemStateChanged(ItemEvent e)
	{
		Object event = e.getSource();
		//如果按下的是数字分组键
		if (event == numGroup)
		{
			if (isNumGroup == true) 
			{
				isNumGroup = false;
				deleteNumGroup();
			}
			else 
			{
				isNumGroup = true;
				showNumGroup();
			}
		}
	}

	// reSet() 是把各属性设置为原始值
	void reSet()
	{
		answerText.setText("0.");
		textBuffer = new StringBuffer("");
		numDot=0;
		remFun = operator = 0;
		firstValue = secondValue = result = 0.0;
		enterSecond = false;
		forFirOrSec = 1;
		b_remFir = b_remSec = b_remFun = false;
		remFir = remSec = 0.0;
		canBeBack = true;
	}

	// showScreen() 是当按下了数字键后,在屏幕上显示。如果有数字分组项,
	// 则调用数字分组函数。如为整数则在其后只显示一个小数点,例如:数值
	// 5 应该显示为 5. 若为小数,则直接显示。
	void showScreen()
	{
		if (numDot==0)
			answerText.setText(textBuffer.toString()+".");
		else
			answerText.setText(textBuffer.toString());
		if (isNumGroup == true)
		{
			showNumGroup();
		}
	}

	// showScreenValue() 是用于显示计算后的结果值,具体的功能同上。
	void showScreenValue()
	{
		int resInteger = (int)result;
		if ( Math.abs(result-resInteger) == 0 )
		{
			StringBuffer tmp = new StringBuffer(Double.toString(result));
			tmp.deleteCharAt(tmp.length()-1);
			answerText.setText(tmp.toString());
		}
		else answerText.setText(Double.toString(result));
		if (isNumGroup == true)
		{
			showNumGroup();
		}
	}

	// 数字分组的显示:每隔三位显示一个逗号以示分隔。
	void showNumGroup()
	{
		int i,cnt=0;
		String string = answerText.getText();
		String interge,fraction;
		interge = fraction = string;
		for (i=0;i<string.length();i++)
		{
			if (string.charAt(i)=='.')
			{
				interge = string.substring(0,i);
				fraction = string.substring(i+1,string.length());
				break;
			}
		}
		StringBuffer sb = new StringBuffer(interge);
		sb.reverse();
		for (i=0;i<sb.length() ;i++ )
		{
			if (Character.isDigit(sb.charAt(i)))
			{
				cnt++;
				if (cnt>3)
				{
					cnt = 0;
					sb.insert(i,",");
				}
			}
		}
		sb.reverse();
		answerText.setText(sb.toString()+"."+fraction);
	}

	//deleteNumGroup() 是当已经数字分组时,再次按下该键,消除数字分组的效果;
	void deleteNumGroup()
	{
		StringBuffer sb = new StringBuffer(answerText.getText());
		for (int i=0;i<sb.length() ;i++ )
		{
			if (sb.charAt(i)==',')
			{
				sb.deleteCharAt(i);
			}
		}
		answerText.setText(sb.toString());
	}

	//当输入了四则运算符时
	void AddFunction(int op)
	{
		//如果此时第二个数存在.则运算,例如输入2+3=5后按*4 +
		if (b_remFir==true && b_remFun==false && enterSecond==true)
		{
			if (operator == 1) result = remFir + secondValue;
			else if (operator == 2) result = remFir - secondValue;
			else if (operator == 3) result = remFir * secondValue;
			else if (operator == 4) result = remFir / secondValue;

			b_remFir = true;	remFir = result;	enterSecond = false;
			forFirOrSec = 2;	operator = op;
			showScreenValue();
		}

		//如果此时第二个数存在.则运算,例如输入2+3后按*键
		else if (b_remFir==false && b_remFun==false && enterSecond==true)
		{
			if (operator == 1) result = firstValue + secondValue;
			else if (operator == 2) result = firstValue - secondValue;
			else if (operator == 3) result = firstValue * secondValue;
			else if (operator == 4) result = firstValue / secondValue;

			b_remFir = true;	remFir = result;	enterSecond = false;
			forFirOrSec = 2;	operator = op;
			showScreenValue();
		}
		else
		{
			operator = op;
			forFirOrSec = 2;
		}
		b_remFun = false;	remFun = 0;
		textBuffer = new StringBuffer("");
	}

	// 把屏幕上的值存入result 和 firstValue secondValue 中。
	void AddNum()
	{
		if (forFirOrSec == 1)
		{
			result = firstValue = Double.parseDouble(textBuffer.toString());
			b_remFir = false;	remFir = 0;
		}
		else if (forFirOrSec == 2)
		{
			enterSecond = true;
			secondValue = Double.parseDouble(textBuffer.toString());
			b_remSec = false;	remSec = 0;
		}
	}
	
	//当按下了等于号时
	void OnGo()
	{
		//如果记着第一,二个数和运算符,即上次算完后未输入数,而再次按=
		if (b_remFir==true && b_remSec==true && b_remFun==true)
		{
			if (remFun==1) result = remFir + remSec;
			else if (remFun==2) result = remFir - remSec;
			else if (remFun==3) result = remFir * remSec;
			else if (remFun==4) result = remFir / remSec;

			b_remFir=true;	b_remSec=true;	b_remFun=true;
			remFir = result; remSec = remSec; remFun = remFun;
		}

		//只记的第一数,如算完2+3=5后按*4=
		else if (b_remFir==true && b_remSec==false && b_remFun==false)
		{
			if (operator == 1) result = remFir + secondValue;
			else if (operator == 2) result = remFir - secondValue;
			else if (operator == 3) result = remFir * secondValue;
			else if (operator == 4) result = remFir / secondValue;

			b_remFir=true;	b_remSec=true;	b_remFun=true;
			remFir = result; remSec = secondValue; remFun = remFun;
		}

		//记住了第一个数,未输入第二个数,输入了运算符.如算完2+3=5后按*=结果为5*5=25;
		else if (b_remFir==true && b_remSec==true && b_remFun==false)
		{
			secondValue = remFir;
			if (operator == 1) result = remFir + secondValue;
			else if (operator == 2) result = remFir - secondValue;
			else if (operator == 3) result = remFir * secondValue;
			else if (operator == 4) result = remFir / secondValue;

			b_remFir=true;	b_remSec=true;	b_remFun=true;
			remFir = result; remSec = secondValue; remFun = remFun;
		}

		//第一二个数和运算符都不记的,记全重新输入,如算完2+3=5后输入4*6=
		else if (b_remFir==false && b_remSec==false && b_remFun==false)
		{
			if (enterSecond == false) secondValue = firstValue;
			if (operator == 1) result = firstValue + secondValue;
			else if (operator == 2) result = firstValue - secondValue;
			else if (operator == 3) result = firstValue * secondValue;
			else if (operator == 4) result = firstValue / secondValue;

			b_remFir=true;	b_remSec=true;	b_remFun=true;
			remFir = result; remSec = secondValue; remFun = remFun;
		}

		showScreenValue();
//		if (result - (int)result == 0) textBuffer = new StringBuffer(Integer.toString((int)result));
//		else textBuffer = new StringBuffer(Double.toString(result));
		textBuffer = new StringBuffer("");
		firstValue = secondValue = 0;
		forFirOrSec = 1;
		enterSecond = false;
		canBeBack = false;
	}

	//以下定义的两个私有成员类是用于复制和粘贴文本区的数字的:
	private class CopyNum implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			StringBuffer selection = new StringBuffer(answerText.getText());
			if (selection == null)
				return;
			if ( selection.charAt(selection.length()-1)=='.' )
			{
				selection.deleteCharAt(selection.length()-1);
			}
			StringSelection clipString = new StringSelection(selection.toString());
			clipbd.setContents(clipString,clipString);
		}
	};

	private class PasteNum implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			Transferable clipData = clipbd.getContents(SimpleCalculator.this);
			try
			{
				String clipString = (String)clipData.getTransferData(DataFlavor.stringFlavor);
				for (int i=0;i<clipString.length();i++)
				{
					if ( !(Character.isDigit(clipString.charAt(i)) || clipString.charAt(i)=='.') )
					{
						clipString = new String("0.");
						break;
					}
				}
				answerText.setText(clipString);
			}
			catch (Exception ex)
			{
				System.out.println("Couldn't get contents in format: "+ 
                        DataFlavor.stringFlavor.getHumanPresentableName()); 
			}
		}
	};


	public static void main(String args[])
	{
		new SimpleCalculator();
	}
}

⌨️ 快捷键说明

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