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

📄 calcappdemo.java

📁 GUI代码,用与实现相关GUI的功能,如有需要即可自由下载!
💻 JAVA
字号:
import java.awt.*; 
import java.awt.event.*; 

public class CalcAppDemo extends Frame{ 
		private TextField t_result; 
		private Panel p_main; //主面板 
		private Panel p_num; //数字面板 
		private Panel p_oper; //操作符面板 
		private Panel p_show; //显示面板 
		private Button b_num[]; //数字按钮 
		private Button b_oper[]; //操作符面板 

public CalcAppDemo(String title){ 
		setTitle(title); 
		
		t_result = new TextField("0.0", 21); 
		p_main = new Panel(); 
		p_num = new Panel(); 
		p_oper = new Panel(); 
		p_show = new Panel(); 
		p_main.setLayout(new BorderLayout()); 
		p_num.setLayout(new GridLayout(4, 3, 1, 1)); 
		p_oper.setLayout(new GridLayout(4, 2, 1, 1)); 

		b_num = new Button[12]; 
		for(int i=0; i<9; i++) 
		{ 
				b_num[i] = new Button(new Integer(i+1).toString()); 
		} 
		b_num[9] = new Button("0"); 
		b_num[10] = new Button("cls"); 
		b_num[11] = new Button("."); 
		for(int i=0; i<12; i++) 
		{ 
				p_num.add(b_num[i]); 
		} 

		b_oper = new Button[8]; 
		b_oper[0] = new Button("+"); 
		b_oper[1] = new Button("-"); 
		b_oper[2] = new Button("*"); 
		b_oper[3] = new Button("/"); 
		b_oper[4] = new Button("pow"); 
		b_oper[5] = new Button("sqrt"); 
		b_oper[6] = new Button("+/-"); 
		b_oper[7] = new Button("="); 
		for(int i=0; i<8; i++) // 
		{ 
				p_oper.add(b_oper[i]); 
		} 

		t_result.setEditable(false); 
		p_show.add(t_result, BorderLayout.NORTH); 
		p_main.add(p_show, BorderLayout.NORTH); 
		p_main.add(p_num, BorderLayout.WEST); 
		p_main.add(p_oper, BorderLayout.EAST); 
		this.add(p_main, BorderLayout.CENTER); 
		setSize(1000, 800); 
		//setResizable(false); 
		pack(); 

		this.addWindowListener(new WindowAdapter(){ 
				public void windowClosing(WindowEvent e) 
				{ 
				System.exit(0); 
				} 
			}); 
			
		ButtonListener b1 = new ButtonListener(); 
		for(int i=0; i<12; i++) 
		{ 
				b_num[i].addActionListener(b1); 
		} 
		for(int i=0; i<8; i++) 
		{ 
				b_oper[i].addActionListener(b1); 
		} 
} 

class ButtonListener implements ActionListener 
{ 
		private String lastOp; //存储上一此操作符 
		private String strVal; //存储数字对应的字符串 
		private double total; //总数 
		private double number; //存储新输入的数 
		private boolean firsttime; //判断是否第一次按下的是操作符按钮 
		private boolean operatorPressed;//判断是否已经按过操作符按钮 

		ButtonListener() 
		{ 
				firsttime = true; 
				strVal = ""; 
		} 

//事件处理器 
		public void actionPerformed(ActionEvent e) 
		{ 
				String s = ((Button)e.getSource()).getLabel().trim(); 

				if(Character.isDigit(s.charAt(0))) 
				{//判断是操作数还是操作符 
					handleNumber(s); 
				} 
					else 
						{ 
							calculate(s); 
						} 
			} 

			//判断是一元操作符还是二元操作符,并根据操作符类型做计算 
		void calculate(String op) 
		{ 
				operatorPressed = true; 

				if(firsttime&&! isUnary(op)) 
				{ 
					total = getNumberOnDisplay(); 
					firsttime = false; 
				} 
				if(isUnary(op)) 
				{ 
					handleUnaryOp(op); 
				} 
					else if(lastOp != null) 
						{ 
							handleBinaryOp(lastOp); 
						} 
				if(! isUnary(op)) 
					{ 
						lastOp = op; 
					} 
			} 

			//判断是否一元操作符 
			boolean isUnary(String s) 
			{ 
					return s.equals("=") 
					||s.equals("cls")||s.equals("sqrt") 
					||s.equals("+/-")||s.equals("."); 
			} 

			//处理一元操作符 
				void handleUnaryOp(String op) 
					{ 
							if(op.equals("+/-")) 
					{// 
						number = negate(getNumberOnDisplay() + ""); 
						t_result.setText(""); 
						t_result.setText(number + ""); 
						return; 
					}else if(op.equals(".")) 
							{ 
									handleDecPoint(); 
									return; 
									}else if(op.equals("sqrt")) 
											{ 
												number = Math.sqrt(getNumberOnDisplay()); 
												t_result.setText(""); 
												t_result.setText(number + ""); 
												return; 
												}else if(op.equals("=")) 
														{// 
															if(lastOp!= null && !isUnary(lastOp)) 
															{ 
																	handleBinaryOp(lastOp); 
															} 
																lastOp = null; 
																firsttime = true; 
																return; 
															}else 
																{ 
																clear(); 
																} 
									} 

					//处理二元运算符 
					void handleBinaryOp(String op) 
						{ 
							if(op.equals("+")) 
							{ 
								total +=number; 
							}else if(op.equals("-")) 
								{ 
									total -=number; 
								}else if(op.equals("*")) 
										{ 
											total *=number; 
										}else if(op.equals("/")) 
											{ 
												try 
												{ 
														total /=number; 
												}catch(ArithmeticException ae){} 
										 }else if(op.equals("pow")) 
												total = Math.pow(total, number); 
												//t_result.setText(""); 
												lastOp = null; 
												// strVal = ""; 
												number = 0; 
												t_result.setText(total + ""); 
				} 

		//该方法用于处理数字按钮 
			void handleNumber(String s) 
		{ 
				if(!operatorPressed) 
				{ 
						strVal += s; 
					}else 
							{ 
								operatorPressed = false; 
								strVal = s; 
							} 
// 
					number = new Double(strVal).doubleValue(); 
					t_result.setText(""); 
					t_result.setText(strVal); 
				} 

						//该方法用于按下"."按钮 
					void handleDecPoint() 
				{ 
					operatorPressed = false; 
					// 
					if(strVal.indexOf(".")<0) 
					{ 
						strVal += "."; 
					} 
					t_result.setText(""); 
					t_result.setText(strVal); 
			} 

//该方法用于将一个数求反 
double negate(String s) 
{ 
		operatorPressed = false; 
//如果是一个整数,去掉小数点后面的0 
		if(number == (int)number) 
		{ 
		s = s.substring(0,s.indexOf(".")); 
		} 

//如果无"-"增加在该数的前面 
		if(s.indexOf("-")<0) 
		{ 
				strVal = "-" + s; 
		} 
			else 
			{ 
					strVal = s.substring(1); 
			} 
				return new Double(strVal).doubleValue(); 
	} 

//将显示框中的值转换成Double 
		double getNumberOnDisplay() 
		{ 
		   return new Double(t_result.getText()).doubleValue(); 
		} 

//清除屏幕并设置所有的标识 
		void clear() 
		{ 
				firsttime = true; 
				lastOp = null; 
				strVal = ""; 
				total = 0; 
				number = 0; 
				t_result.setText("0"); 
		} 
} 


public static void main(String[] args) { 
		CalcAppDemo c = new CalcAppDemo("简单的计算器程序"); 
		c.setVisible(true); 
} 

}

⌨️ 快捷键说明

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