JavaGUI实现简单计算器.docx

上传人:b****2 文档编号:17733947 上传时间:2023-08-03 格式:DOCX 页数:27 大小:107.60KB
下载 相关 举报
JavaGUI实现简单计算器.docx_第1页
第1页 / 共27页
JavaGUI实现简单计算器.docx_第2页
第2页 / 共27页
JavaGUI实现简单计算器.docx_第3页
第3页 / 共27页
JavaGUI实现简单计算器.docx_第4页
第4页 / 共27页
JavaGUI实现简单计算器.docx_第5页
第5页 / 共27页
JavaGUI实现简单计算器.docx_第6页
第6页 / 共27页
JavaGUI实现简单计算器.docx_第7页
第7页 / 共27页
JavaGUI实现简单计算器.docx_第8页
第8页 / 共27页
JavaGUI实现简单计算器.docx_第9页
第9页 / 共27页
JavaGUI实现简单计算器.docx_第10页
第10页 / 共27页
JavaGUI实现简单计算器.docx_第11页
第11页 / 共27页
JavaGUI实现简单计算器.docx_第12页
第12页 / 共27页
JavaGUI实现简单计算器.docx_第13页
第13页 / 共27页
JavaGUI实现简单计算器.docx_第14页
第14页 / 共27页
JavaGUI实现简单计算器.docx_第15页
第15页 / 共27页
JavaGUI实现简单计算器.docx_第16页
第16页 / 共27页
JavaGUI实现简单计算器.docx_第17页
第17页 / 共27页
JavaGUI实现简单计算器.docx_第18页
第18页 / 共27页
JavaGUI实现简单计算器.docx_第19页
第19页 / 共27页
JavaGUI实现简单计算器.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

JavaGUI实现简单计算器.docx

《JavaGUI实现简单计算器.docx》由会员分享,可在线阅读,更多相关《JavaGUI实现简单计算器.docx(27页珍藏版)》请在冰点文库上搜索。

JavaGUI实现简单计算器.docx

JavaGUI实现简单计算器

Java面向对象编程

实验报告

 

题目:

数组与图形化界面

专业:

计算机科学与技术

班级:

1120542

学号:

06

姓名:

聂建建

 

太原工业学院计算机工程系

2014年5月16日

一、实验目的与要求

1、掌握Java编程中的数组的应用

2、掌握JavaGUI编程的应用以及API的查阅

3、掌握JavaGUI窗体容器、布局管理器、基本组件、事件的注册

实验内容

JavaGUI实现如下图简单计算器

 

三、实施步骤

1.首先创建所需要的变量,组件,组件数组

/*结果输入框*/

privateJTextFieldresult;

/*操作键之前缓存*/

privateStringBuilderbeforeCache=newStringBuilder();

/*操作键之后缓存*/

privateStringBuilderafterCache=newStringBuilder();

/*清除键*/

privateJButtonclean;

/*数字键*/

privateJButton[]numberButs=newJButton[10];

/*操作键*/

privateMapoperKeyMap=newHashMap();

/*操作标识*/

privatebooleanoperFlag=false;

2.然后对组件进行初始化,将加减乘除等操作间用map集合以键值对的形式添加。

/*初始化组件*/

privatevoidinitComp(){

/*清除按钮初始化*/

clean=newJButton("清除");

/*结果按钮初始化*/

result=newJTextField(10);

/*数字键初始化*/

for(inti=0;i<10;i++){

numberButs[i]=newJButton(""+i);

}

/*操作键的初始化*/

operKeyMap.put("jia",newJButton("+"));

operKeyMap.put("jian",newJButton("-"));

operKeyMap.put("chen",newJButton("*"));

operKeyMap.put("dengyu",newJButton("="));

operKeyMap.put("dian",newJButton("."));

operKeyMap.put("chu",newJButton("/"));

}

3.设置主窗体的属性,包括窗体大小,起始位置

this.setSize(300,300);//设置窗体大小

this.setLocation(350,350);//设置第一次打开的左上角的坐标

4.设置相应的控件的位置,添加在主窗体内

主要分为三大部分,一是位于主窗体北部的TextField空间,用来显示输入和计算结果;二是位于主窗体中部的清楚按钮;三是位于主窗体南部的数字和操作键位。

this.add(result,BorderLayout.NORTH);//设置输入框位于北部

JPanelkeyPanel=newJPanel();

//设置Jpanel的布局GridLayout

GridLayoutgl=newGridLayout(4,4);//四行四列

keyPanel.setLayout(gl);//设置键的布局为gl

this.add(clean,BorderLayout.CENTER);

this.add(keyPanel,BorderLayout.SOUTH);

 

5.注册相应的监听事件

/**

*注册事件监听

***/

privatevoidaddListenerHandler(){

/*主窗体事件处理*/

this.addWindowListener(newMainWindowListenerImpl());

/*清除按钮事件处理*/

clean.addMouseListener(newMouseListenerImpl());

clean.addActionListener(newCleanButtonActionListenerImpl(this));

/*数字键事件处理*/

for(JButtonnumBut:

numberButs){

numBut.addMouseListener(newMouseListenerImpl());

numBut.addActionListener(newNumKeyActionListenerImpl(this));

}

/*操作键事件处理*/

CollectionoperButtons=operKeyMap.values();

for(JButtonoperBut:

operButtons){

operBut.addMouseListener(newMouseListenerImpl());

operBut.addActionListener(mOperKeyActionListenerImpl);

}

}

privateOperKeyActionListenerImplmOperKeyActionListenerImpl=newOperKeyActionListenerImpl(this);

6.设置主窗体的点击事件,使得退出按钮生效

//设置窗口的关闭按钮的监听事件:

退出

@Override

publicvoidwindowClosing(WindowEvente){

System.out.println("退出了");

System.exit(0);

}

7.设置相应组件点击后的效果

按钮点击按下之后为红色:

publicvoidmousePressed(MouseEvente){

JButtonbt=(JButton)e.getSource();

//设置此组件的前景色

bt.setForeground(Color.RED);

}

鼠标离开之后为黑色:

publicvoidmouseExited(MouseEvente){

JButtonbt=(JButton)e.getSource();

bt.setForeground(Color.black);

}

8.清除键具体的监听事件设置

JTextFieldresult=calculator.getResult();

//获取输入文本

StringresultStr=result.getText();

if(!

resultStr.equals("")){

//文本内容,重置为空

result.setText("");

//缓存清空

StringBuilderbeforeCache=calculator.getBeroreCache();

StringBuilderafterCache=calculator.getAfterCache();

beforeCache.delete(0,beforeCache.length());

afterCache.delete(0,afterCache.length());

calculator.setOperFlag(false);

}

9.数字键具体的监听时间设置

//获得当前操作的数字键

JButtonbutton=(JButton)e.getSource();

//获得数字键对应的输入值

StringnumberValue=button.getText();

if(!

calculator.isOperFlag()){

calculator.getBeroreCache().append(numberValue);

calculator.getResult().setText(

calculator.getBeroreCache().toString());

}else{

calculator.getAfterCache().append(numberValue);

calculator.getResult().setText(

calculator.getAfterCache().toString());

}

10.操作计算键具体的部分监听事件设置(+-*/=)

privateCalculatorDemocal;

//运算结果

intresult;

//操作符之前的数字

inta;

//操作符之后的数字

intb;

//操作符标志

intz=0;

publicOperKeyActionListenerImpl(CalculatorDemoc){

this.cal=c;

}

/*

*如果按下操作键盘,依据操作键表示的操作类型,执行相关的计算计算步骤:

1>取得操作键之前的缓存输入2>获取操作键之后的数字键输入

*3>获取相关操作类型,执行计算

*/

@Override

publicvoidactionPerformed(ActionEventevent){

//1>取得操作键之前的缓存输入

StringBuilderbefore=cal.getBeforeCache();

/*获取操作键*/

JButtonbut=(JButton)event.getSource();

//判断操作符

if(but==cal.getOperKeyMap().get("jia")){

z=0;

}elseif(but==cal.getOperKeyMap().get("jian")){

z=1;

}elseif(but==cal.getOperKeyMap().get("chen")){

z=2;

}elseif(but==cal.getOperKeyMap().get("chu")){

z=3;

}

//置空结果显示

cal.getResult().setText("");

cal.setOperFlag(true);

//2>获取操作键之后的数字键输入

StringBuilderafter=cal.getAfterCache();

if(but==cal.getOperKeyMap().get("dengyu")){

a=Integer.parseInt(before.toString().trim());

b=Integer.parseInt(after.toString().trim());

switch(z){

case0:

result=a+b;

break;

case1:

result=a-b;

break;

case2:

result=a*b;

break;

case3:

result=a/b;

break;

default:

break;

}

cal.getResult().setText(""+result);

}

}

 

四、实验结果

主界面:

5和3分别进行+-*/的操作的结果如下:

五、出现的问题及解决的方法

刚开始加减乘除无法实现,后来发现是调用对象的问题,每次调用监听事件都要new一个对象,所以每次都执行的是z=0的默认值,所以每次只执行加操作。

最后给这些按钮注册同一个监听事件,问题解决了

错误之前的代码如下:

CollectionoperButtons=operKeyMap.values();

for(JButtonoperBut:

operButtons){

operBut.addMouseListener(newMouseListenerImpl());

operBut.addActionListener(newOperKeyActionListenerImpl(this));

}

因为我给每一个按钮都加了一个监听对象OperKeyActionListenerImpl,他们的z的值都是独立的,所以,最后点等于号的时候,那里的z的值一直是默认值0,就进去加号那个运算了。

应该给所有按钮绑定同一个监听事件才合理的。

所以修改后的代码如下:

CollectionoperButtons=operKeyMap.values();

for(JButtonoperBut:

operButtons){

operBut.addMouseListener(newMouseListenerImpl());operBut.addActionListener(mOperKeyActionListenerImpl);

}

}

privateOperKeyActionListenerImplmOperKeyActionListenerImpl=newOperKeyActionListenerImpl(

this);

 

六:

源码

类:

CalcutorDemo

packageCaculator;

importjava.awt.BorderLayout;

importjava.awt.GridLayout;

importjava.util.Collection;

importjava.util.HashMap;

importjava.util.Map;

importjavax.swing.JButton;

importjavax.swing.JFrame;

importjavax.swing.JPanel;

importjavax.swing.JTextField;

publicclassCalculatorDemoextendsJFrame{

/*结果输入框*/

privateJTextFieldresult;

/*操作键之前缓存*/

privateStringBuilderbeforeCache=newStringBuilder();

/*操作键之后缓存*/

privateStringBuilderafterCache=newStringBuilder();

/*清除键*/

privateJButtonclean;

/*数字键*/

privateJButton[]numberButs=newJButton[10];

/*操作键*/

privateMapoperKeyMap=newHashMap();

/*操作标识*/

privatebooleanoperFlag=false;

publicvoidsetOperFlag(booleanoperFlag){

this.operFlag=operFlag;

}

publicCalculatorDemo(){

initComp();

initMainWindow();

addListenerHandler();

}

/*初始化组件*/

privatevoidinitComp(){

/*清除按钮初始化*/

clean=newJButton("清除");

/*结果按钮初始化*/

result=newJTextField(10);

/*数字键初始化*/

for(inti=0;i<10;i++){

numberButs[i]=newJButton(""+i);

}

/*操作键的初始化*/

operKeyMap.put("jia",newJButton("+"));

operKeyMap.put("jian",newJButton("-"));

operKeyMap.put("chen",newJButton("*"));

operKeyMap.put("dengyu",newJButton("="));

operKeyMap.put("dian",newJButton("."));

operKeyMap.put("chu",newJButton("/"));

}

/**

*初始化Main窗体

***/

privatevoidinitMainWindow(){

this.setSize(300,300);

this.setLocation(350,350);

this.add(result,BorderLayout.NORTH);

JPanelkeyPanle=newJPanel();

//设置JPanel的布局(GridLayout)

GridLayoutgl=newGridLayout(4,4);

keyPanle.setLayout(gl);

keyPanle.add(numberButs[7]);

keyPanle.add(numberButs[8]);

keyPanle.add(numberButs[9]);

keyPanle.add(operKeyMap.get("chu"));

keyPanle.add(numberButs[4]);

keyPanle.add(numberButs[5]);

keyPanle.add(numberButs[6]);

keyPanle.add(operKeyMap.get("chen"));

keyPanle.add(numberButs[1]);

keyPanle.add(numberButs[2]);

keyPanle.add(numberButs[3]);

keyPanle.add(operKeyMap.get("jian"));

keyPanle.add(numberButs[0]);

keyPanle.add(operKeyMap.get("dian"));

keyPanle.add(operKeyMap.get("jia"));

keyPanle.add(operKeyMap.get("dengyu"));

this.add(clean,BorderLayout.CENTER);

this.add(keyPanle,BorderLayout.SOUTH);

this.setVisible(true);

}

///**

//*注册事件监听

//***/

//privatevoidaddListenerHandler(){

///*主窗体事件处理*/

//this.addWindowListener(newMainWindowListenerImpl());

///*清除按钮事件处理*/

//clean.addMouseListener(newMouseListenerImpl());

//clean.addActionListener(newCleanButtonActionListenerImpl(this));

///*数字键事件处理*/

//for(JButtonnumBut:

numberButs){

//numBut.addMouseListener(newMouseListenerImpl());

//numBut.addActionListener(newNumKeyActionListenerImpl(this));

//}

///*操作键事件处理*/

//CollectionoperButtons=operKeyMap.values();

//for(JButtonoperBut:

operButtons){

//operBut.addMouseListener(newMouseListenerImpl());

//operBut.addActionListener(mOperKeyActionListenerImpl);

//}

//}

//

//privateOperKeyActionListenerImplmOperKeyActionListenerImpl=new

//OperKeyActionListenerImpl(

//this);

/**

*注册事件监听

***/

privatevoidaddListenerHandler(){

/*主窗体事件处理*/

this.addWindowListener(newMainWindowListenerImpl());

/*清除按钮事件处理*/

clean.addMouseListener(newMouseListenerImpl());

clean.addActionListener(newCleanButtonActionListenerImpl(this));

/*数字键事件处理*/

for(JButtonnumBut:

numberButs){

numBut.addMouseListener(newMouseListenerImpl());

numBut.addActionListener(newNumKeyActionListenerImpl(this));

}

/*操作键事件处理*/

Collectio

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 节日庆典

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2