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

📄 calculator.java

📁 采用java语言开发的计算器.不妨下载试试看啊.相信会对你有帮助的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	 * 3.关于事件<br>
	 */
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==menuItemCopy){
			//JOptionPane.showMessageDialog(null, "复制");
			msg.selectAll();
			msg.copy();
		}
		if(e.getSource()==menuItemCut){
			//JOptionPane.showMessageDialog(null, "粘贴");
			try {
				Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
				if(t!=null && t.isDataFlavorSupported(DataFlavor.stringFlavor)){
					//得到剪贴板中的字符串
					String text = t.getTransferData(DataFlavor.stringFlavor).toString();
					//得到 字符串中的 数字和. 得到的是数组。
					String[] sp = text.split("[\\D&&[^.]]");
					//从数组中得到最后一个数字
					if(sp.length>0){
						String str = sp[sp.length-1];
						System.out.println(str);
						//对得到的数字再次以.分割
						String[] sp2 = str.split("\\.");
						System.out.println(sp2.length);
						//对于数组长度大于2的得到后两个数组成的小数
						if(sp2.length>1){
							String x = sp2[sp2.length-2];
							text =( x.equals("")?"0":x)+"."+sp2[sp2.length-1];
						}
						//对于数组长度等于1的直接可以使用
						//else if(sp2.length==1)
						//	text = sp2[sp2.length-1];
						//对于数组长度等于0的
						else
							//text = sp[sp.length-1];
							text = sp2[sp2.length-1];
						msg.setText(text);
					}
					
				}
			} catch (HeadlessException e1) {
				System.out.println("错误:"+e1.getMessage());
			} catch (UnsupportedFlavorException e1) {
				System.out.println("错误:"+e1.getMessage());
			} catch (IOException e1) {
				System.out.println("错误:"+e1.getMessage());
			}
		}
		if(e.getSource()==menuItemAbout){
			//JOptionPane.showMessageDialog(null, "<html><body>程序参与人员 :<br>研发部总监 : 赵德奎<br>分 析 设 计&nbsp; :&nbsp;&nbsp;杨&nbsp;&nbsp;强<br>代 码 编 写&nbsp; :&nbsp;&nbsp;小&nbsp;&nbsp;猪<body></html>");
			new About(this,"关于本计算器",true);
		}
		
	}
	
	/**
	 * 按钮事件。包括+、-、*、/、1/x、数字等按钮事件。<br>
	 * 此类继承AbstractAction
	 * 2008-8-7
	 * @author		达内科技[Tarena Training Group]
	 * @version	1.0
	 * @since		JDK1.6(建议) 
	 */
	private class ButtonListener extends AbstractAction{
		public void actionPerformed(ActionEvent e) {
			//System.out.println("cpem");
			//System.out.println(e.getActionCommand());
			int i= 0;
			//
			for(i=0;i<buttons.length;i++){
				if(e.getActionCommand().equals(buttons[i].getText()))
					break;
			}
			double value2;
			try {
				value2 = Double.parseDouble(msg.getText());
			} catch (NumberFormatException e1) {
				System.out.println("错误:"+e1.getMessage());
				value2 = 0;
			}
			switch(i){
			case 0:		//=
				if(operation!=0){
					double result = 0;
					switch (operation) {
					case 1:
						result = value+value2;
						break;
					case 2:
						result = value-value2;
						break;
					case 3:
						result = value*value2;
						break;
					case 4:
						result = value/value2;
						break;
					}
					showResult(result+"");
					hasPressed = false;
				}
				break;
			case 1:
			case 2:		//+、-、*、/
			case 3:
			case 4:
				if(operation!=0 && hasPressed){
					countResult(value2);
				}
				value = Double.parseDouble(msg.getText());
				if(tmp.length()>0){
					tmp = new StringBuffer();
				}
				operation = i;
				break;
			case 5:		//1/x
				if(value2!=0)
					showResult((1/value2)+"");
				else
					showResult("");
				break;
			case 6:		//+/-
				if(value2!=0)
					showResult((value2*-1)+"");
				break;
			case 7:		//sqrt
				if(value2!=0)
					showResult(Math.sqrt(value2)+"");
				break;
			case 8:		//%
				showResult((value*value2/100)+"");
				break;
			case 9:		//.
				if(isContain(tmp.toString(), "."))
					break;
				if(value2==0)
					tmp.append(0);
				value2 = -1;
			case 10:	//0-9
				if(value2==0)
					break;
			case 11:
			case 12:
			case 13:
			case 14:
			case 15:
			case 16:
			case 17:
			case 18:
			case 19:
				if(tmp.length()<=allowLength){
					tmp.append(buttons[i].getText());
					msg.setText(tmp.toString());
					if(operation!=0 && hasPressed==false)
						hasPressed = true;
				}
				break;
			case 20:	//MC
				if(hasSaved){
					saveNum = 0;
					hasSaved = false;
					lblInfo.setText("");
				}
				break;
			case 21:	//MR
				String result = saveNum+"";
				msg.setText(result.endsWith(".0")?result.substring(0, result.length()-2):result);
				break;
			case 22:	//MS
				if(value2!=0){
					saveNum = value2;
					hasSaved = true;
					lblInfo.setText("M");
				}
				break;
			case 23:	//M+
				if(value2!=0){
					saveNum += value2;
					hasSaved = true;
					lblInfo.setText("M");
				}
				break;
			case 24:	//Backspace
				if(tmp.length()==1)
					showResult("0");
				if(tmp.length()>1){
					tmp.deleteCharAt(tmp.length()-1);
					msg.setText(tmp.toString());
				}
				break;
			case 25:	//CE
				clearAll("0");
				break;
			case 26:	//C
				clearAll("0");
				break;
			}
		}
	}
	
	/**
	 * 检测某字符串中是否包含某个字符串。
	 * @param str 待检测的字符串。
	 * @param ch 要包含的字符串。
	 * @return 包含返回true,否则false。
	 */
	private boolean isContain(String str,String ch){
		return str.indexOf(ch)!=-1;
	}
	
	/**
	 * 设置计算的得到的结果。
	 * @param result 需要设置的结果。
	 */
	private void showResult(String result){
		msg.setText(result.endsWith(".0")?result.substring(0, result.length()-2):result);
		tmp = new StringBuffer();
		//operation = 0;
	}
	
	/**
	 * 清空结果。
	 * @param result 需要设置的值。
	 */
	private void clearAll(String result){
		showResult(result);
		value = 0;
		operation = 0;
		hasPressed = false;
	}
	
	/**
	 * 计算结果并显示结果。
	 * @param value2 第二个操作数。
	 */
	private void countResult(double value2){
		double result = 0;
		switch (operation) {
		case 1:
			result = value+value2;
			break;
		case 2:
			result = value-value2;
			break;
		case 3:
			result = value*value2;
			break;
		case 4:
			result = value/value2;
			break;
		}
		showResult(result+"");
		hasPressed = false;
		value = result;
	}
}

⌨️ 快捷键说明

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