JAVA培训报告
主题:java计算器应用程序
简介:通过这个程序可以实现计算器的基本功能。程序是Frame类的子类。GridLayout用于布局组件,按钮和文本框组件存储在Panel类的容器中。程序中还使用了大量的else - if语句。
2、设计说明:
实验的目的
通过实践训练,结合实例进一步理解面向对象编程的基本概念,掌握编程的基本方法和技巧,灵活使用包,进一步理解接口,熟练掌握接口中事件的实现。深刻理解并灵活运用面向对象编程的基本特征,培养良好的编程风格,提高抽象思维和逻辑思维能力。
二、实验内容
写一个应用程序实现计算器。
三个程序介绍及其功能实现
程序需要导入导入java.awt.*,导入java.awt.event.*,导入java.lang.*,导入javax.swing.*包。①程序的基本框架是:先定义Frame类的一个子类,然后声明三个面板的布局,即定义GridLayout类gl1、gl2、gl3三个对象。然后有四个对象p0,p1,p2和p3定义了Panel类的容器,其中p0用于存储显示文本框组件,p1用于存储删除和重置按钮,p3用于存储数字按钮和操作按钮,p2用于存储其他功能按钮。②具体实现过程如下:(1)程序定义JTextField类的对象tf1、TextField类的对象tf2和button类的26个按钮,在Counter类的构造方法中初始化每个对象,适当排列面板,并相应地将每个按钮添加到相应的容器中,在实例化所有按钮并设置其前景色的同时注册监听器。
(2)各个组件的相应设计完成后,也就是程序运行后的可视化界面完成后,就会实现程序的内部事件过程,也就是界面的实现。定义了一个名为Bt的类来实现该接口。该程序在actionPerformed()方法中实现每个按钮和文本框组件的特定方法。在程序中,else-if语句用于实现按钮操作事件和处理事件的异常。
3.程序列表
导入Java . awt . *;
导入Java . awt . event . *;
导入Java . lang . *;
导入javax . swing . *;
公共类计数器扩展框架
{
//声明三个面板的布局
GridLayout gl1,gl2,gl3
面板p0,p1,p2,P3;
JTextField TF 1;
TextField tf2
按钮b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b16,b12,b13,b14,b15,b16,b17,b18,b 18
StringBuffer字符串;//显示在显示屏上的字符串
双x,y;//x和y是操作数。
int z;//Z表示点击了哪个操作符。0表示“+”,1表示“-”,2表示“*”,3表示“/”
静态双m;//记忆的数字
公共计数器()
{
GL 1 = new GridLayout(1,4,10,0);//实例化三个面板的布局
gl2=new GridLayout(4,1,0,15);
gl3=new GridLayout(4,5,10,15);
TF 1 = new JTextField(27);//显示屏
TF 1 . sethorizontal alignment(JTextField。对);
TF 1 . set enabled(false);
TF 1 . settext(" 0 ");
tf2 =新文本字段(10);//显示记忆的索引值。
tf2 . set editable(false);
//实例化所有按钮,设置它们的前景色并注册侦听器。
b0 =新建按钮(“退格”);
B0 . set foreground(color . red);
B0 . addactionlistener(new Bt());
b 1 =新建按钮(" CE ");
b 1 . set foreground(color . red);
b 1 . addactionlistener(new Bt());
b2 =新建按钮(" C ");
B2 . set foreground(color . red);
B2 . addactionlistener(new Bt());
b3 =新建按钮(" MC ");
B3 . set foreground(color . red);
B3 . addactionlistener(new Bt());
b4 =新建按钮(" MR ");
B4 . set foreground(color . red);
B4 . addactionlistener(new Bt());
b5 =新建按钮(" MS ");
b5 . set foreground(color . red);
b5 . addactionlistener(new Bt());
b6 =新建按钮(" M+");
B6 . set foreground(color . red);
B6 . addactionlistener(new Bt());
b7 =新建按钮(" 7 ");
B7 . set foreground(color . blue);
B7 . addactionlistener(new Bt());
b8 =新建按钮(" 8 ");
b8 . set foreground(color . blue);
b8 . addactionlistener(new Bt());
b9 =新建按钮(" 9 ");
B9 . set foreground(color . blue);
B9 . addactionlistener(new Bt());
b 10 =新建按钮("/");
b 10 . set foreground(color . red);
b 10 . addactionlistener(new Bt());
b 11 =新建按钮(" sqrt ");
b 11 . set foreground(color . blue);
b 11 . addactionlistener(new Bt());
b 12 =新建按钮(" 4 ");
b 12 . set foreground(color . blue);
b 12 . addactionlistener(new Bt());
b 13 =新建按钮(" 5 ");
b 13 . set foreground(color . blue);
b 13 . addactionlistener(new Bt());
b 14 =新建按钮(" 6 ");
b 14 . set foreground(color . blue);
b 14 . addactionlistener(new Bt());
b 15 =新建按钮(" * ");
b 15 . set foreground(color . red);
b 15 . addactionlistener(new Bt());
b 16 =新建按钮(" % ");
b 16 . set foreground(color . blue);
b 16 . addactionlistener(new Bt());
b 17 =新建按钮(" 1 ");
b 17 . set foreground(color . blue);
b 17 . addactionlistener(new Bt());
b 18 =新建按钮(" 2 ");
b 18 . set foreground(color . blue);
b 18 . addactionlistener(new Bt());
b 19 =新建按钮(" 3 ");
b 19 . set foreground(color . blue);
b 19 . addactionlistener(new Bt());
b20 =新建按钮("-");
b20 . set foreground(color . red);
b20 . addactionlistener(new Bt());
b 21 =新建按钮(" 1/X ");
b 21 . set foreground(color . blue);
b 21 . addactionlistener(new Bt());
b22 =新建按钮(" 0 ");
b22 . set foreground(color . blue);
b22 . addactionlistener(new Bt());
b23 =新建按钮("+/-");
b23 . set foreground(color . blue);
b23 . addactionlistener(new Bt());
b24 =新建按钮(".");
b24 . set foreground(color . blue);
b24 . addactionlistener(new Bt());
b25 =新建按钮("+");
b25 . set foreground(color . red);
b25 . addactionlistener(new Bt());
b26 =新建按钮(" = ");
b26 . set foreground(color . red);
b26 . addactionlistener(new Bt());
//实例化四个面板
p0 =新面板();
p 1 =新面板();
p2 =新面板();
P3 = new Panel();
//创建空的stringbuffer区域。
str = new string buffer();
//在面板p0中添加组件,并设置它们在框架中的位置和大小。
P0 . add(TF 1);
p0.setBounds(10,25,300,40);
//在panel p1中添加组件,并设置它们在框架中的位置和大小。
p 1 . set layout(GL 1);
p 1 . add(tf2);
p 1 . add(B0);
p 1 . add(b 1);
p 1 . add(B2);
p1.setBounds(10,65,300,25);
//在面板p2中添加组件,并设置其在框架中的位置和大小。
p2 . set layout(gl2);
p2 . add(B3);
p2 . add(B4);
p2 . add(b5);
p2 . add(B6);
p2.setBounds(10,110,40,150);
//在面板p3中添加组件,并设置其在框架中的位置和大小。
P3 . set layout(gl3);//设置p3的布局
P3 . add(B7);
P3 . add(b8);
P3 . add(B9);
P3 . add(b 10);
P3 . add(b 11);
P3 . add(b 12);
P3 . add(b 13);
P3 . add(b 14);
P3 . add(b 15);
P3 . add(b 16);
P3 . add(b 17);
P3 . add(b 18);
P3 . add(b 19);
P3 . add(b20);
P3 . add(b 21);
P3 . add(b22);
P3 . add(b23);
P3 . add(b24);
P3 . add(b25);
P3 . add(b26);
p3.setBounds(60,110,250,150);
//将框架中的布局设置为空,并添加4个面板。
set layout(null);
添加(P0);
添加(p 1);
添加(p2);
添加(P3);
setResizable(false);//禁止调整框架的大小
//匿名类关闭窗口
addWindowListener(new window adapter(){
公共void窗口关闭(WindowEvent e1)
{
system . exit(0);
}
});
set background(color . light gray);
setBounds(100,100,320,280);
set visible(true);
}
//构造侦听器
Bt类实现ActionListener
{
公共无效操作已执行(操作事件e2)
{
尝试{
If(e2.getSourCE()==b1)//选择“CE”清除。
{
TF 1 . settext(" 0 ");//清除显示。
str . setlength(0);//清除stringbuffer区域,为接收新的输入操作数做准备。
}
Else if(e2.getSource()==b2)//选择“c”清除。
{
TF 1 . settext(" 0 ");//清除显示。
str . setlength(0);
}
Else if(e2.getSource()==b23)//点击“+/-”选择输入操作数是正还是负。
{
x = double . parse double(TF 1 . gettext()。trim());
TF 1 . settext("+(-x));
}
Else if(e2.getSource()==b25)//点击加号按钮获取x和z的值,清除y的值。
{
x = double . parse double(TF 1 . gettext()。trim());
str . setlength(0);//清空缓冲区以接收另一个新操作数。
y = 0d
z = 0;
}
Else if(e2.getSource()==b20)//点击减号按钮,得到x和z的值,清除y的值。
{
x = double . parse double(TF 1 . gettext()。trim());
str . setlength(0);
y = 0d
z = 1;
}
else if(E2 . getsource()= = b 15)//单击乘法按钮获取x的值和z的值,并清除y的值。
{
x = double . parse double(TF 1 . gettext()。trim());
str . setlength(0);
y = 0d
z = 2;
}
else if(E2 . getsource()= = b 10)//单击除法按钮获得x的值和z的值,并将y的值留空。
{
x = double . parse double(TF 1 . gettext()。trim());
str . setlength(0);
y = 0d
z = 3;
}
Else if(e2.getSource()==b26)//点击等号按钮输出计算结果。
{
str . setlength(0);
开关(z)
{
案例0:TF 1 . settext("+(x+y));打破;
case 1:TF 1 . settext("+(x-y));打破;
案例二:TF 1 . settext("+(x * y));打破;
案例三:TF 1 . settext("+(x/y));打破;
}
}
Else if(e2.getSource()==b24)//单击“.”按钮输入小数。
{
if(tf1.getText()。修剪()。indexOf(“.”))!=-1)//判断字符串中是否包含小数点。
{
}
Else//不算的话,小。
{
If (tf1.gettext()。修剪()。equals(" 0 ")//如果最初显示为0。
{
str . setlength(0);
TF 1 . settext((str . append(" 0 "+E2 . getactioncommand()))。toString());
}
Elseif (tf1.gettext()。修剪()。equals(" ")//如果最初为空,则不执行任何操作。
{
}
其他
{
TF 1 . settext(str . append(E2 . getactioncommand())。toString());
}
}
y = 0d
}
else if(E2 . getsource()= = b 11)//求平方根。
{
x = double . parse double(TF 1 . gettext()。trim());
Tf1.setText("异常数字格式");
if(x & lt;0)
Tf1.setText("负数没有平方根");
其他
TF 1 . settext("+math . sqrt(x));
str . setlength(0);
y = 0d
}
else if(E2 . getsource()= = b 16)//单击“%”按钮。
{
x = double . parse double(TF 1 . gettext()。trim());
TF 1 . settext("+(0.01 * x));
str . setlength(0);
y = 0d
}
else if(E2 . getsource()= = b 21)//单击“1/X”按钮。
{
x = double . parse double(TF 1 . gettext()。trim());
如果(x==0)
{
Tf1.setText ("Divider不能为零");
}
其他
{
TF 1 . settext("+(1/x));
}
str . setlength(0);
y = 0d
}
Else if(e2.getSource()==b3)//MC是清空内存。
{
m = 0d
tf2 . settext(" ");
str . setlength(0);
}
Else if(e2.getSource()==b4)//MR引用被调用的存储数据。
{
if(tf2.getText()。trim()!= " ")//内存号
{
TF 1 . settext("+m);
}
}
Else if(e2.getSource()==b5)//MS是存储和显示的数据。
{
m = double . parse double(TF 1 . gettext()。trim());
tf2 . settext(" M ");
TF 1 . settext(" 0 ");
str . setlength(0);
}
Else if(e2.getSource()==b6)//M+要将显示的数字与存储的数据相加,点击MR查看新的数字。
{
m = m+double . parse double(TF 1 . gettext()。trim());
}
Else//选择其他按钮。
{
If(e2.getSource()==b22)//如果选择了数字键“0”,
{
If (tf1.gettext()。修剪()。equals(" 0 ")//如果显示为零,则什么都不做。
{
}
其他
{
TF 1 . settext(str . append(E2 . getactioncommand())。toString());
y = double . parse double(TF 1 . gettext()。trim());
}
}
Else if(e2.getSource()==b0)//选择了“退格”按钮。
{
如果(!Tf1.gettext()。修剪()。equals(" 0 ")//如果显示不为零。
{
if(str.length()!=1)
{
TF 1 . settext(str . delete(str.length()-1,str . length())。toString());//可能会引发字符串越界异常。
}
其他
{
TF 1 . settext(" 0 ");
str . setlength(0);
}
}
y = double . parse double(TF 1 . gettext()。trim());
}
Else//其他数字键
{
TF 1 . settext(str . append(E2 . getactioncommand())。toString());
y = double . parse double(TF 1 . gettext()。trim());
}
}
}
catch(NumberFormatException e){
Tf1.setText("异常数字格式");
}
catch(StringIndexOutOfBoundsException e){
Tf1.setText("字符串索引越界");
}
}
}
公共静态void main(String args[])
{
new Counter();
}
}
4.调试结果
5、实习经历