Java2计算器.docx
《Java2计算器.docx》由会员分享,可在线阅读,更多相关《Java2计算器.docx(15页珍藏版)》请在冰豆网上搜索。
![Java2计算器.docx](https://file1.bdocx.com/fileroot1/2023-1/31/25b0845c-6d0e-4b09-94e1-6f192f101112/25b0845c-6d0e-4b09-94e1-6f192f1011121.gif)
Java2计算器
第一部分需求分析
计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除.取余等简单运算的工具。
计算器大大的降低了数字计算的难度及提高了计算的准确度和精确度。
第二部分设计思想
2.1根据图形用户界面设计方法设计计算器版面。
①容器类(窗口--JFrame类,面板--JPanel类),框架类JButton类,JTextField类等类的构造方法的建立于应用。
②事件处理机制:
监听器类MouseListener()。
2.2计算器计算功能
计算器计算功能实现,通过对按钮进行监听,实现了计算器的加法、减法、乘法、除法、求余数、开平方根。
还要实现数据的输入,输出,计算,显示及程序退出等功能。
自定义变量:
first,second为操作数,operator操作运算符。
根据单击按钮不同进行不同的操作,详处理按钮单击事件方法MyMouseListener.
第三部分详细设计
3.1calculator()函数(计算器版面设计)流程图:
Y
3.2MouseListener()的计算方法的主要实现流程图:
N
N
N
第四部分运行效果图
4.1运行初始图:
4.2计算功能测试图:
计算Sqrt4
计算4%3
第五部分程序清单
importjava.awt.BorderLayout;
importjava.awt.Button;
importjava.awt.Color;
importjava.awt.Frame;
importjava.awt.GridLayout;
importjava.awt.Panel;
importjava.awt.TextField;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseListener;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JPanel;//WindowAdapter
importjavax.swing.JTextField;
publicclassCaextendsJFrame{//JFrame窗口类
privateStringfirst;//保存第一个操作数
privateStringsecond;//保存第二个操作数
privateStringoperator;//保存操作符
//面板
privateJPaneljp1=null;
privateJPaneljp2=null;
privateJPaneljp3=null;
//文本框
privateJTextFieldjtf=null;
//数字按钮
privateJButtonnum0=null;
privateJButtonnum1=null;
privateJButtonnum2=null;
privateJButtonnum3=null;
privateJButtonnum4=null;
privateJButtonnum5=null;
privateJButtonnum6=null;
privateJButtonnum7=null;
privateJButtonnum8=null;
privateJButtonnum9=null;
//运算符按钮
privateJButtonadd=null;
privateJButtonsub=null;
privateJButtondiv=null;
privateJButtonmul=null;
privateJButtonmod=null;
privateJButtonsqrt=null;
//符号按钮
privateJButtonequal=null;
privateJButtonpoint=null;
//
privateJButtonce=null;//清零
privateJButtonc=null;//删除
publicCa(){
this.setTitle("计算器");//设置标题
this.setBounds(200,50,250,280);//设置标题和窗口大小
InitComponent();//初始化按钮
addComponent();//添加按钮
//添加鼠标监听
num0.addMouseListener(newMyMouseListener());//newMyMouseListener()注册监听器
num1.addMouseListener(newMyMouseListener());
num2.addMouseListener(newMyMouseListener());
num3.addMouseListener(newMyMouseListener());
num4.addMouseListener(newMyMouseListener());
num5.addMouseListener(newMyMouseListener());
num6.addMouseListener(newMyMouseListener());
num7.addMouseListener(newMyMouseListener());
num8.addMouseListener(newMyMouseListener());
num9.addMouseListener(newMyMouseListener());
add.addMouseListener(newMyMouseListener());
sub.addMouseListener(newMyMouseListener());
div.addMouseListener(newMyMouseListener());
mul.addMouseListener(newMyMouseListener());
mod.addMouseListener(newMyMouseListener());
sqrt.addMouseListener(newMyMouseListener());
equal.addMouseListener(newMyMouseListener());
point.addMouseListener(newMyMouseListener());
ce.setBackground(Color.green);//设置ce按钮的背景颜色
c.setBackground(Color.cyan);//设置c按钮的背景颜色
ce.addMouseListener(newMyMouseListener());
c.addMouseListener(newMyMouseListener());
this.setVisible(true);//显示窗口
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口
}
classMyMouseListenerimplementsMouseListener{
publicvoidmouseClicked(MouseEvente){
JButtonbtn=(JButton)e.getSource();
Stringkey=btn.getActionCommand().trim();
if(btn==num1||btn==num2||btn==num3||btn==num0||btn==num4||btn==num5||btn==num6||btn==num7||btn==num8||btn==num9){
if(isBlank(operator)){
if(isBlank(first)){
first=key;
}else{
first+=key;
}
jtf.setText(first);
}else{
if(isBlank(second)){
second=key;
}else{
second+=key;
}
jtf.setText(second);
}
}elseif(btn==point){
if(isBlank(operator)){
if(isBlank(first)){
first="0.";
jtf.setText(first);
}else{
if(first.indexOf(".")==-1){
first+=".";
jtf.setText(first);
}
}
}else{
if(isBlank(second)){
second="0.";
jtf.setText(second);
}else{
if(second.indexOf(".")==-1){
second+=".";
jtf.setText(second);
}
}
}
}elseif(btn==equal){//按下等于按钮
if(!
isBlank(second)&&!
isBlank(first)&&!
isBlank(operator)){
doubleresult=0.0D;
if(operator.equals("+")){
result=Double.parseDouble(first)
+Double.parseDouble(second);
}elseif(operator.equals("-")){
result=Double.parseDouble(first)
-Double.parseDouble(second);
}elseif(operator.equals("*")){
result=Double.parseDouble(first)
*Double.parseDouble(second);
}elseif(operator.equals("/")){
result=Double.parseDouble(first)
/Double.parseDouble(second);
}elseif(operator.equals("%")){
result=Double.parseDouble(first)
%Double.parseDouble(second);
}
intvalue=(int)Math.round(result);
if(value==result){
jtf.setText(String.valueOf(value));
}else{
jtf.setText(String.valueOf(result));
}
first=String.valueOf(result);
second=null;
operator=null;
}elseif(!
isBlank(first)&&!
isBlank(operator))
{
doubleresult=0.0D;
if(operator.equals("sqrt")){
result=Math.sqrt(Double.parseDouble(first));
}
intvalue=(int)Math.round(result);
if(value==result){
jtf.setText(String.valueOf(value));
}else{
jtf.setText(String.valueOf(result));
}
first=String.valueOf(result);
second=null;
operator=null;
}
}elseif(btn==add||btn==sub||btn==div||btn==mul||btn==mod||btn==sqrt){
if(!
isBlank(first)){
if(!
isBlank(operator)&&!
isBlank(second)){
if(operator.equals("+")){
first=String.valueOf(Double.parseDouble(first)
+Double.parseDouble(second));
}elseif(operator.equals("-")){
first=String.valueOf(Double.parseDouble(first)
-Double.parseDouble(second));
}elseif(operator.equals("*")){
first=String.valueOf(Double.parseDouble(first)
*Double.parseDouble(second));
}elseif(operator.equals("/")){
first=String.valueOf(Double.parseDouble(first)
/Double.parseDouble(second));
}elseif(operator.equals("%")){
first=String.valueOf(Double.parseDouble(first)
%Double.parseDouble(second));
}
second=null;
}elseif(!
isBlank(operator)&&isBlank(second)){
if(operator.equals("sqrt"))
{
first=String.valueOf(Math.sqrt(Double.parseDouble(first)));
}
}
operator=key;
}
}elseif(btn==ce){
first=null;
second=null;
operator=null;
jtf.setText(null);
}elseif(btn==c){
if(isBlank(operator)){
if(!
isBlank(first)){
first=first.substring(0,first.length()-1);
jtf.setText(first);
}
}else{
if(!
isBlank(second)){
second=second.substring(0,second.length()-1);
jtf.setText(second);
}
}
}
}
privatebooleanisBlank(Stringstr){
returnstr==null||str.trim().equals("");
}
publicvoidmousePressed(MouseEvente){
}
publicvoidmouseReleased(MouseEvente){
}
publicvoidmouseEntered(MouseEvente){
}
publicvoidmouseExited(MouseEvente){
}
}
privatevoidaddComponent(){
//this.setLayout(newGridBagLayout());
jtf.setHorizontalAlignment(JTextField.RIGHT);//设置文本框右对齐
//将文本框jtf添加到jp1面板上
jp1.add(jtf);
this.add(jp1,BorderLayout.NORTH);//将jp1面板添加到窗口上
jp2.setLayout(newGridLayout(1,2));//设置jp2面板的布局方式为网格布局
//将按钮添加到jp2面板
jp2.add(ce);
jp2.add(c);
this.add(jp2,BorderLayout.CENTER);//将jp2面板添加到窗口的中部BorderLayout为边界布局
//将按钮添加到jp3面板上
jp3.add(num1);
jp3.add(num2);
jp3.add(num3);
jp3.add(mod);
jp3.add(mul);
jp3.add(num0);
jp3.add(num4);
jp3.add(sqrt);
jp3.add(num5);
jp3.add(div);
jp3.add(num6);
jp3.add(num7);
jp3.add(point);
jp3.add(add);
jp3.add(num8);
jp3.add(num9);
jp3.add(sub);
jp3.add(equal);
//设置jp3面板的布局方式为网格布局
jp3.setLayout(newGridLayout(6,3));
//将jp3面板添加到窗口的底部BorderLayout为边界布局
this.add(jp3,BorderLayout.SOUTH);
//添加监听
}
privatevoidInitComponent(){
//初始化面板jp1,jp2,jp3
jp1=newJPanel();
jp2=newJPanel();
jp3=newJPanel();
//初始化文本框的宽度为20
jtf=newJTextField(20);
//初始化数字按钮
num1=newJButton("1");
num2=newJButton("2");
num3=newJButton("3");
num4=newJButton("4");
num5=newJButton("5");
num6=newJButton("6");
num7=newJButton("7");
num8=newJButton("8");
num9=newJButton("9");
num0=newJButton("0");
ce=newJButton("CE");//清零按钮
c=newJButton("C");//删除按钮
//运算符按钮
mod=newJButton("%");
add=newJButton("+");
sub=newJButton("-");
mul=newJButton("*");
div=newJButton("/");
sqrt=newJButton("sqrt");
equal=newJButton("=");
point=newJButton(".");
}
publicstaticvoidmain(String[]args){
newCa();
}
}
第六部分心得与体会
6.1Java是一门实践性很强的编程语言,每学习到一个新的知识点应当及时动手编写程序,提高动手能力,加深对语言的理解。
6.2根据Java图形用户界面设计方法设计计算器版面有很多种设计方法,学习过程中应灵活变通,使版面的设计更简单易懂。
6.3本次设计的计算器还有不足之处,首先还没有实现科学型的计算功能,其次还没有键盘输入功能,因此还应继续努力,更加完善计算器的功能。
6.4java监听器是java功能实现的重要组成部分,监听器的接口也是相当的重要的环节,本次实验中,每个按钮功能的实现都离不开监听器。