计算器Java代码实现(进行按钮事件处理和键盘事件处理)

声明:

由于本人是Java初学者,对Java语言理解不是很透彻
以下代码部分参考了许多课本和网上的一些资料,经过本人对这些资料的理解,所以写下了以下程序代码
经运行测试,已经完全实现了计算器的基础功能,并且能够对运行界面进行鼠标点击操作和键盘输入操作。
本人已将代码进行了注释,如果有不懂的地方可细看后面注释进行理解。

设计思路:

运用字符串转换成算术运算的思想
先定义按钮文本框以及窗口
其次将按钮事件和按压键盘事件生成的字符串放置在文本框中
最后按等号或Enter键将文本框中的字符串转换成算术表达式运算为结果,最后输出到文本框中

计算器实现的功能:

已实现加、减、乘、除、正负号、退格、将百分数转换成实数、清零、取倒数、百分数转换等功能
相关组件能够进行按钮事件和键盘事件处理

代码部分:

import java.awt.*;
import java.awt.event.*;
import javax.script.*;
import javax.swing.*;
	
public void keyTyped(KeyEvent e) 
{
	
} 
public void keyPressed(KeyEvent e)			//键盘按键监听
{
	char label=e.getKeyChar();
	String k=String.valueOf(label);
	if(label==KeyEvent.VK_ENTER)
	{
		handleResult();
	}
	else if(label==KeyEvent.VK_BACK_SPACE) 
	{
		String s = resultText.getText();
		if(s!=null) 
		{
			handleBackspace();				//调用定义的处理←方法
		}else 
		{
			resultText.setText(s);
		}			
	}
	else
	{
		handleEquation(k);					//按下数字和运算符号的叠加
	}
}	
public void keyReleased(KeyEvent e) 
{
	
}	
public void actionPerformed(ActionEvent e)	//按钮监听
{
	String label=e.getActionCommand();		//获取该按键内容
	if(label.equals("1/x"))					//判断按钮输入内容
	{
		handleReciprocal();					//调用定义的处理1/x方法
	}
	else if(label.equals("←")) {
		String s = resultText.getText();
		if(s!=null) 
		{
			handleBackspace();				//调用定义的处理←方法
		}else 
		{
			resultText.setText(s);
		}			
	}
	else if(label.equals("="))
	{
		handleResult();						//调用定义的处理=方法
	}
	else if(label.equals("C"))
	{
		handleC();							//调用定义的处理C方法
	}
	else if(label.equals("±"))
	{
		handleOppositeNumber();				//调用定义的处理±方法
	}
	else if(label.equals("%"))				
	{
		handlePercent();						//调用定义处理百分比方法
	}
	else
	{
		handleEquation(label);				//调用算式处理方法
	}
}
public void handleOppositeNumber()			//定义符号反转方法
{
	String strText = resultText.getText();
	Double a = Double.parseDouble(strText);
	a=a*(-1);
	strText=String.valueOf(a);
	resultText.setText(strText);
}
public void handleReciprocal()				//定义1/x方法  
{
	String strText = resultText.getText();
	Double a = Double.parseDouble(strText);
	a=1/a;
	strText=String.valueOf(a);
	resultText.setText(strText);
}
public void handlePercent()					//定义%方法
{
	String strText = resultText.getText();
	Double a = Double.parseDouble(strText);
	a=a*(0.01);
	strText=String.valueOf(a);
	resultText.setText(strText);
}
public void handleEquation(String label)		//定义算式处理方法
{
	if(resultText.getText().equals("0"))
	{
		resultText.setText(label);							//如果为文本框显示内容为0	则输出到文本框显示内容不变
	}
	else
	{
		resultText.setText(resultText.getText()+label);		//如果初始状态不为0		则将字符串进行叠加
	}
}
public void handleResult()					//定义处理结果的方法
{
	String text=resultText.getText();
	try 
	{
		Object a=jse.eval(text);				//它可以把字符串转换为表态式并执行
		text=String.valueOf(a);
		resultText.setText(text);
	} 
	catch (ScriptException e) 				//处理异常
	{
		resultText.setText("格式错误");
	}
}
public void handleBackspace()				//定义删除方法
{	
	String strText = resultText.getText();
	strText = strText.substring(0,strText.length()-1);//删除最后一个字符串	
	resultText.setText(strText);
}
public void handleC()						//定义C方法
{
	resultText.setText("0");
}	
public void centered(Container container)	//定义屏幕自适应居中方法
{
	Toolkit toolkit=Toolkit.getDefaultToolkit();	//定义一个抽象类 通过这个方法可以获取到Toolkit的对象
	Dimension screenSize=toolkit.getScreenSize();	//获取主显示器屏幕分辨率大小 1920×1080
	int w=container.getWidth();					//将屏幕的宽度赋给w 1920
	int h=container.getHeight();					//将屏幕的高度赋给h 1080
	container.setBounds((screenSize.width-w)/2, (screenSize.height-h)/2, w, h);//在屏幕中心显示
}
public static void main(String[] args) 		//主函数
{
	Calculator test=new Calculator();			//运行函数
}

运行页面如下:
可以进行鼠标点击或者键盘按键操作

上述运行界面参照手机上的计算器进行制作
可以实现基础运算

扩展软件包介绍:

  1. java.awt软件包:
    抽象窗口工具包,包含创建图形界面和绘制图像的所有类。比如容器类、组建类、局部管理器类等 包括组件的颜色等
  2. java.awt.event软件包:
    包含事件处理类。其中用到的有按钮事件处理和键盘事件处理
  3. javax.script软件包:
    是后端java语言和前端语言javascript语言进行交互的中介。Java Scripting API 包含一组类和接口,这是一个相对比较小的 package包,以 ScriptEngineManager 类作为起点。
  4. javax.swing软件包
    定义了顶层容器和轻量级组件

致谢:

最后特别感谢各位大佬的例程,我才能够更加深刻理解计算器的设计思路,编写出完整的代码。

查看完整代码请点击此链接:

猜你喜欢

转载自blog.csdn.net/weixin_43730812/article/details/84870650