Java计算器实验报告.docx
《Java计算器实验报告.docx》由会员分享,可在线阅读,更多相关《Java计算器实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
![Java计算器实验报告.docx](https://file1.bdocx.com/fileroot1/2023-1/9/6d11d1d9-37d8-481b-b491-11860da720c6/6d11d1d9-37d8-481b-b491-11860da720c61.gif)
Java计算器实验报告
一、目标:
通过Java程序开发实训使学生掌握《面向对象程序设计(Java)》课堂讲授的内容,灵活运用到Java程序的开发与设计中。
二、要求:
按时参加Java程序开发实训训练,不得迟到和早退;独立完成程序设计;按要求撰写实践报告。
三、详细内容:
使用《面向对象程序设计(Java)》课程讲授内容,编写一个简单的计算器,要求实现如下功能:
1.进行图形界面设计
通过图形界面设计,掌握Frame类、Panel类、5种布局管理器、文本框、标签及按钮的使用方法。
2.实现计算器的基本功能
包括加减乘除四则运算、清除结果等功能。
3.实现计算器的存储计算功能
包括清空、使用清零、退格。
和基本运算
4.类的属性及所用到的方法布局
布局:
整个界面(Frame)采用BorderLayout布局
P1组件添加到Frame的南部
P1采用默认的流式布局添加文本框
P2组件添加到Frame的中部
P2采用网格布局四行五列放各种按钮
用到的类:
mycal
KeyAdapter
WindowAdapter
MyCal类:
mycal类的属性:
b[];按钮数组保存各种按键以后放到Panel2中
tf;文本匡显示输入及运算结果
num1,num2,jieguo运算数
charc,ch;运算符号,ch为输入的运算符号,c保存ch输入的“+-*/”
Panelp1,p2;//两个组件p1放文本匡p2放按钮
P2的布局为网格布局5行4列
mycal类的方法:
1.构造方法:
设置标题;
设置文本框;
文本框中添加匿名内置类(KeyAdapter)实现键盘的输入和运算;
将各种组件添加到容器,设置各种按键的颜色;
添加WindowListenr监听器设置关闭按钮;
2.Main方法:
新建一个mycal类;
4.actionPerformed方法:
设置按钮的输入和运算,
当按下运算数将其显示在文本匡中如果之前清零则将零去除
当按下运算符将其保存在c中并将文本匡内容清空
当按下等号判断字符c的符号进行相应的运算并将结果显示在文本框中。
当按下清空按钮将文本框清空,当按下退格按钮取文本框中字符串的字串删除一个符号。
KeyAdapter类:
KeyAdapter类的属性:
mycal类中的属性
KeyAdapter类的方法:
keyPressed()方法
当键盘按下时,判断键盘的输入
当为“+-*/”时记录下num1及c;
当为”=”或“Enter”时记录下num2并将结果计算出来
keyReleased()方法
当键盘松开时,
如果是按下“+-*/”后松开
将文本框清空
如果是按下“=”或“Enter”后松开
将计算结果显示在文本框中
WindowAdapter类:
WindowAdapter类的属性:
WindowEvente
WindowAdapter类的方法:
windowClosing();
设置关闭按钮
、四、源代码
/*
类mycal继承Frame实现了ActionListener接口;
往容器中添加两个组件Panel1,Panel2;
Panel中放置文本匡,Panel2中放置各种按键;
文本匡中以匿名内置类的方式添加键盘监听器实现键盘的输入及运算;
为Panel2中各种按键添加动作监听器实现按键的输入及运算;
*/
importjava.awt.*;
importjava.awt.event.*;
classmycalextendsFrameimplementsActionListener
{
privateButton[]b;
privateTextFieldtf;
privatedoublenum1,num2,jieguo;//运算数
privatecharc,ch;//运算符
Panelp1,p2;//两个组件
publicmycal()
{
setTitle("MyCalculator1.0");
p1=newPanel();
tf=newTextField(25);
tf.addKeyListener(newKeyAdapter(){//添加键盘监听器现键盘的输入及运算
publicvoidkeyPressed(KeyEvente)
{
charch=e.getKeyChar();
if("+-*/".indexOf(ch)!
=-1)
{
num1=Double.parseDouble(tf.getText());
c=ch;
}
if(ch=='='|ch==e.VK_ENTER)
{
num2=Double.parseDouble(tf.getText());
switch(c)
{
case'+':
jieguo=num1+num2;break;
case'-':
jieguo=num1-num2;break;
case'*':
jieguo=num1*num2;break;
case'/':
jieguo=num1/num2;break;
}
}
}
publicvoidkeyReleased(KeyEvente)
{
charch=e.getKeyChar();
if("+-*/".indexOf(ch)!
=-1)
{
tf.setText(null);
}
if(ch=='='|e.getKeyCode()==e.VK_ENTER)
{
tf.setText(Double.toString(jieguo));
}
}
});
p1.add(tf);
add(p1,"North");
p2=newPanel();
p2.setLayout(newGridLayout(5,4,10,8));
b=newButton[21];
for(inti=1;i<21;i++)
{
b[i]=newButton();
b[i].setFont(newFont("仿宋",0,16));
}
Stringstr1="/789*456-123+0";
b[1].setLabel("退格");
b[2].setLabel("清空");
b[3].setLabel("清零");
for(inti=4;i<=17;i++)
{
b[i].setLabel(str1.charAt(i-4)+"");
}
b[18].setLabel("+/-");
b[19].setLabel(".");
b[20].setLabel("=");
for(inti=1;i<21;i++)
{
p2.add(b[i]);
b[i].addActionListener(this);
b[i].setBackground(newColor(20,130,180));
b[i].setForeground(Color.yellow);
}
for(inti=1;i<4;i++)
{
b[i].setBackground(newColor(120,180,170));
b[i].setForeground(Color.blue);
}
for(inti=1;i<=4;i++)
{b[i*4].setBackground(newColor(120,180,170));
b[i*4].setForeground(Color.red);
}
b[20].setBackground(Color.red);
add(p2);
//Dimensiondi=this.getPreferredSize();
//System.out.println(di.width+","+di.height);
setBounds(100,200,230,300);
setVisible(true);
addWindowListener(newWindowAdapter(){//设置关闭按钮
publicvoidwindowClosing(WindowEvente)
{
e.getWindow().setVisible(false);
e.getWindow().dispose();
System.exit(0);
}
});
}
publicstaticvoidmain(Stringargs[])
{
newmycal();
}
publicvoidactionPerformed(ActionEvente)//为Panel2中各种按键添加动作监听器实现按键的输入及运算;
{
Stringstr=e.getActionCommand().trim();
if("0123456789.".indexOf(str)!
=-1)
{
if(tf.getText().equals("0"))tf.setText(null);
tf.setText(tf.getText()+str);
return;
}
if("+-*/".indexOf(str)!
=-1)
{
num1=Double.parseDouble(tf.getText());
c=str.charAt(0);
tf.setText(null);
return;
}
elseif(str.equals("="))
{
num2=Double.parseDouble(tf.getText());
switch(c)
{
case'+':
jieguo=num1+num2;break;
case'-':
jieguo=num1-num2;break;
case'*':
jieguo=num1*num2;break;
case'/':
jieguo=num1/num2;break;
}
tf.setText(Double.toString(jieguo));
}
elseif(str.equals("+/-"))
{
if(tf.getText().isEmpty()==false)
{
Doublelnum=-(Double.parseDouble(tf.getText()));
tf.setText(Double.toString(lnum));
}
else
{
tf.setText("-");
}
}
elseif(str.equals("清空"))
{
tf.setText(null);
}
elseif(str.equals("清零"))
{
tf.setText("0");
}
elseif(str.equals("退格"))
{
tf.setText(tf.getText().substring(0,tf.getText().length()-1));
}
}
}
五、程序运行结果演示
计算器界面
7+8
清空
9*4
7*8
退格
清零
六、总结
通过本次实验让我对Frame类、Panel类、5种布局管理器、文本框、标签及按钮的使用方法,有了进一步的了解。
同时在实验过程中也发现了自己的许多不足,但通过查询对其有有了更深刻大大大的了解.