Java实验四GUI简易计算器.docx

上传人:b****3 文档编号:10241246 上传时间:2023-05-24 格式:DOCX 页数:19 大小:159.79KB
下载 相关 举报
Java实验四GUI简易计算器.docx_第1页
第1页 / 共19页
Java实验四GUI简易计算器.docx_第2页
第2页 / 共19页
Java实验四GUI简易计算器.docx_第3页
第3页 / 共19页
Java实验四GUI简易计算器.docx_第4页
第4页 / 共19页
Java实验四GUI简易计算器.docx_第5页
第5页 / 共19页
Java实验四GUI简易计算器.docx_第6页
第6页 / 共19页
Java实验四GUI简易计算器.docx_第7页
第7页 / 共19页
Java实验四GUI简易计算器.docx_第8页
第8页 / 共19页
Java实验四GUI简易计算器.docx_第9页
第9页 / 共19页
Java实验四GUI简易计算器.docx_第10页
第10页 / 共19页
Java实验四GUI简易计算器.docx_第11页
第11页 / 共19页
Java实验四GUI简易计算器.docx_第12页
第12页 / 共19页
Java实验四GUI简易计算器.docx_第13页
第13页 / 共19页
Java实验四GUI简易计算器.docx_第14页
第14页 / 共19页
Java实验四GUI简易计算器.docx_第15页
第15页 / 共19页
Java实验四GUI简易计算器.docx_第16页
第16页 / 共19页
Java实验四GUI简易计算器.docx_第17页
第17页 / 共19页
Java实验四GUI简易计算器.docx_第18页
第18页 / 共19页
Java实验四GUI简易计算器.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Java实验四GUI简易计算器.docx

《Java实验四GUI简易计算器.docx》由会员分享,可在线阅读,更多相关《Java实验四GUI简易计算器.docx(19页珍藏版)》请在冰点文库上搜索。

Java实验四GUI简易计算器.docx

Java实验四GUI简易计算器

实验四GUI图形界面设计

一实验要求

1、掌握Awt与Swing的区别与联系;掌握Swing常用图像组件的使用;掌握主要的布局管理器的使用方法;

2、了解事件处理机制;掌握Swing常用图像组件的使用;掌握固定菜单和弹出式菜单的创建和使用;

二实验内容

1、设计并实现一个类似于windows操作系统附件中自带的计算器的一款简单的计算器,要求界面美观,设计合理;带有常用的菜单并实现其功能;能完成加、减、乘、除等简单的计算,在下面写出其核心代码。

(1)源代码

packagecom.cal;

importjava。

awt。

*;

importjavax。

swing。

*;

importjava。

awt。

event。

*;

importjava。

util。

Stack;

importjava.awt。

GridLayout;

classCalextendsJFrameimplementsActionListener{

JTextFieldshow=null;

JPaneljp1,jp2;

JButtonc,jia,jian,cheng,chu,equ,point;

//按钮清空加,减,乘,除,等号,小数点

JButtonb[]=newJButton[10];//按钮数组0-9

//栈控制标记位

intflag=1;

//结果标记位

intreflag=0;

publicCal()

//创建组件

jp1=newJPanel();

jp2=newJPanel();

show=newJTextField(45);

show.setFont(newFont(”宋体",Font。

PLAIN,16));

jia=newJButton(”+");

jian=newJButton(”—”);

cheng=newJButton(”*”);

chu=newJButton(”/");

equ=newJButton(”=”);

equ。

setForeground(Color.RED);

equ.setBackground(Color.GREEN);

point=newJButton("。

”);

b[0]=newJButton(”0");

b[1]=newJButton("1”);

b[2]=newJButton(”2");

b[3]=newJButton(”3”);

b[4]=newJButton("4”);

b[5]=newJButton("5”);

b[6]=newJButton(”6”);

b[7]=newJButton(”7”);

b[8]=newJButton("8");

b[9]=newJButton(”9”);

c=newJButton(”C”);

c。

setForeground(Color.RED);

c。

setBackground(Color.YELLOW);

c。

setFont(newFont("黑体",Font.PLAIN,15));

//添加组件

jp1。

add(show);

jp1。

add(c);

//show.setEditable(false);

jp2。

add(b[7]);

jp2.add(b[8]);

jp2。

add(b[9]);

jp2.add(jia);

jp2。

add(b[4]);

jp2.add(b[5]);

jp2.add(b[6]);

jp2.add(jian);

jp2。

add(b[1]);

jp2。

add(b[2]);

jp2.add(b[3]);

jp2.add(cheng);

jp2.add(equ);

jp2.add(b[0]);

jp2。

add(point);

jp2。

add(chu);

jp2.setLayout(newGridLayout(4,4,3,3));

//注册监听

show.addActionListener(this);

jia.addActionListener(this);

jian。

addActionListener(this);

cheng.addActionListener(this);

chu.addActionListener(this);

equ。

addActionListener(this);

point.addActionListener(this);

c。

addActionListener(this);

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

b[i].addActionListener(this);

}

//设置布局管理器

this.add(jp1,BorderLayout。

NORTH);

this。

add(jp2);

//设置窗体属性

this.setTitle("简易计算器");

this.setSize(500,300);

this。

setLocation(500,200);

this。

setDefaultCloseOperation(JFrame。

EXIT_ON_CLOSE);

//显示窗体

this.setVisible(true);

}

@Override

publicvoidactionPerformed(ActionEvente)

{

if(reflag==1&&e.getSource()!

=equ)

show.setText("");

if(e。

getSource()==b[0])

show.setText(show。

getText()+”0");

flag=0;

reflag=0;

}elseif(e.getSource()==b[1])

{

show.setText(show。

getText()+”1");

flag=0;

reflag=0;

}elseif(e。

getSource()==b[2])

{

show。

setText(show。

getText()+”2”);

flag=0;

reflag=0;

}elseif(e。

getSource()==b[3])

{

show.setText(show。

getText()+”3");

flag=0;

reflag=0;

}elseif(e。

getSource()==b[4])

show.setText(show.getText()+”4");

flag=0;

reflag=0;

}elseif(e.getSource()==b[5])

show.setText(show。

getText()+"5");

flag=0;

reflag=0;

}elseif(e.getSource()==b[6])

{

show。

setText(show.getText()+”6");

flag=0;

reflag=0;

}elseif(e。

getSource()==b[7])

show。

setText(show。

getText()+”7");

flag=0;

reflag=0;

}elseif(e。

getSource()==b[8])

{

show.setText(show。

getText()+”8");

flag=0;

reflag=0;

}elseif(e。

getSource()==b[9])

{

show。

setText(show.getText()+”9");

flag=0;

reflag=0;

//操作符处理

elseif(e。

getSource()==jia)

show。

setText(show。

getText()+”+”);

flag=1;

reflag=0;

}elseif(e。

getSource()==jian)

show.setText(show。

getText()+"—”);

flag=1;

reflag=0;

}elseif(e.getSource()==cheng)

show。

setText(show。

getText()+”*");

flag=1;

reflag=0;

}elseif(e.getSource()==chu)

{

show.setText(show。

getText()+"/");

flag=1;

reflag=0;

}elseif(e.getSource()==point){//小数点只能按一次

show.setText(show.getText()+”.”);

flag=1;

reflag=0;

}

elseif(e.getSource()==c){

show。

setText(””);

flag=1;

reflag=0;

//计算结果并输出

else{

Strings=show.getText();

if(s。

charAt(s。

length()-1)=='/'||s。

charAt(s。

length()—1)=='*’||

s.charAt(s.length()—1)==’+’||s。

charAt(s。

length()-1)=='—')

show。

setText("符号不能放最后");

elseif(s。

charAt(s.length()-1)==’.'&&s。

charAt(s.length()—2)=='.')

show.setText(”pointsareboom");

else

show.setText(”=”+SetSum(s));

reflag=1;

flag=1;

}

}

privatedoubleSetSum(Stringst)

if(st。

trim()=="")return0;

//实例化用来存放操作数和操作符的栈并清空

Stack〈Object>SNum=newStack();

Stack〈Object〉SOp=newStack();

SNum。

removeAllElements();

SOp。

removeAllElements();

StringSnum=”";

doubleInum=0;

chara1=st.charAt((st.length()—1));

charb1=st。

charAt((st.length()-2));

for(inti=0;i〈st.length();i++)

charc=st。

charAt(i);

if(c=='+’||c==’—’)

{

Inum=Double。

parseDouble(Snum);

if(SOp。

empty())

SNum。

push(Inum);

else

switch((char)SOp。

peek())

{

case'+':

SNum。

push((double)SNum.pop()+Inum);

SOp。

pop();

break;

case'-’:

SNum。

push((double)SNum。

pop()—Inum);

SOp。

pop();

break;

case'*’:

SNum。

push((double)SNum。

pop()*Inum);

SOp.pop();

break;

case’/’:

SNum.push((double)SNum.pop()/Inum);

SOp.pop();

break;

}

}

//将符号压入栈

switch(c)

{

case’+’:

SOp。

push(’+’);

break;

case’-':

SOp。

push('-');

break;

Snum=””;

}

elseif(c=='*'||c=='/')

Inum=Double。

parseDouble(Snum);

if(SOp.empty())

SNum。

push(Inum);

else{

if(a1==’0'&&b1==’.’){//如果是整数,则去掉后面的小数点和0

show。

setText(String。

valueOf(Math.round(Inum)));

}

switch((char)SOp。

peek())

case’*’:

SNum。

push((double)SNum.pop()*Inum);

SOp.pop();

break;

case’/':

SNum.push((double)SNum。

pop()*Inum);

SOp。

pop();

break;

default:

SNum.push(Inum);

break;

//将符号压入符号栈

switch(c)

case'*’:

SOp。

push('*');

break;

case'/’:

SOp。

push('/’);

break;

}

Snum=””;

}

else

Snum=Snum+c;

}

SNum.push(Double。

parseDouble(Snum));//将表达式最后一个数入栈

doublea,b;

while(!

SOp.empty())

a=(double)SNum。

pop();

b=(double)SNum.pop();

switch((char)SOp。

pop())

{

case’+’:

SNum。

push(b+a);

break;

case’-’:

SNum。

push(b—a);

break;

case'*':

SNum.push(b*a);

break;

case’/’:

SNum.push(b/a);

break;

return(double)SNum.pop();

publicclassCalculter{

publicstaticvoidmain(String[]args){

//TODO自动生成的方法存根

Calcal=newCal();

}

(2)截图

清除

小数

三实验内容中遇到的问题、解决方法和体会。

遇到的问题:

1.String如何转为double类型

2.栈的使用

3.符号放到最后出错

4.连续输入小数点出错

5.如何实现小数的运算

6.Exceptioninthread”AWT—EventQueue-0”java.lang.StringIndexOutOfBoundsException:

Stringindexoutofrange:

—1

java。

lang。

NumberFormatException

解决方法:

1。

Inum=Double。

parseDouble(Snum);

2。

查询Java开发文档解决.

3.输出错误信息

4。

输出错误信息

5。

chara1=st。

charAt((st。

length()—1));

charb1=st。

charAt((st.length()-2));

if(a1==’0’&&b1=='。

’){show。

setText(String.valueOf(Math.round(Inum)));

}

6.不直接按等于号

体会

这个实验是一个很综合的实验,需要用到GUI,事件监听,和栈涉及到很多的知识,自己也有很多不会的内容,做这个实验很考验自己的耐性,和信心,以及查阅信息的能力。

但最总的结果是好的,做出来很开心。

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

当前位置:首页 > 总结汇报 > 学习总结

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

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