java课内趣味小实验--计算器calc

本文介绍了一个简单的Java图形界面计算器的设计与实现过程。该计算器具备基本的四则运算功能,通过文本框输入数字,并利用按钮触发计算。文章详细展示了如何使用FlowLayout布局管理器和其他Swing组件来构建用户界面。

java课内趣味小实验--计算器calc

    任何剽窃行为都是可耻的,你可以学习交流,但不好把别人的代码拿过来,说这是你自己写的。

    愿祖国加速富强……

实验四 带事件的图形界面

一、实验目的

掌握编写图形界面的一般方法,包括文本输入框、按钮、标签、布局管理器、授权事件模型的使用。

二、实验环境

PC系列微机,Windows XP。

JDK150或更高版本。

三、实验内容

编写一个计算两个数相加的加法器,要求:

1、提供输入两个加数的文本输入框。

2、一个表示“+”的标签

3、一个“=”按钮

4、一个保存两数相加的和的文本框

当单击等号按钮时,能够计算出两数的和并显示到第三个文本框,同时能够判断两个加数是否是合法,即都是数字。

界面参考如下:

提示:

1、使用FlowLayout布局管理器

2、判断输入的是不是数字可以单独编写一个方法boolean isNumber(String

s),在输入框的FocusEvent事件的focusLost方法中调用isNumber。

在isNumber方法中应该循环取出s中的每一个字符,判断是否大于57或小于48(因为0的ascii码是48,9的ascii码是57),如果符合条件则可以说明不是数字,否则就是合法数字。

3、给等号按钮添加ActionListener事件,并实现actionPerformed方法,在该方法中取出前两个输入的值并转换成int或double型数据,相加后放入和的文本输入框中。

四、实验报告

写出合格的实验报告,至少包括实验目的、实验内容(程序代码)、出现的问题、学到的知识等。


code:

package javaExp4$;

import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class CalcDemo extends Frame {
	TextField a1,a2,ans;
	Label lblE,lblInstruction,lblI2;
	Button btnAdd,btnSub,btnMul,btnDiv;
	Panel p;
	CalcDemo(){
		init();
	}
	private void init(){
		this.setTitle("计算器[1.1.1](操作数必为整型)");
		p=new Panel();//152,64,102苹果红;102,64,152亮紫
		p.setLayout(new FlowLayout());
		p.setBackground(Color.CYAN);
		a1=new TextField(6);
		a2=new TextField(6);
		ans=new TextField(20);
		lblE=new Label("=");
		lblE.setBackground(new Color(152,64,102));
		lblE.setForeground(Color.YELLOW);
		lblInstruction=new Label("此计算器功能已初步完善,较上一版本改进了 主要功能缺失、结果框不应输入等问题");
		lblI2=new Label("   [1.1.1]版较上一版本改进了背景色、前景色的设置");
		//lblI2.setFont(Font.getFont("华文细黑"));
		btnAdd=new Button("+");
		btnAdd.setBackground(new Color(102,64,152));
		btnAdd.setForeground(Color.YELLOW);
		btnAdd.setFont(Font.getFont("华文细黑"));
		btnSub=new Button("-");
		btnSub.setBackground(new Color(102,64,152));
		btnSub.setForeground(Color.YELLOW);
		btnMul=new Button("*");
		btnMul.setBackground(new Color(102,64,152));
		btnMul.setForeground(Color.YELLOW);
		btnDiv=new Button("/");
		btnDiv.setBackground(new Color(102,64,152));
		btnDiv.setForeground(Color.YELLOW);
		ans.addFocusListener(new Control(this));
		btnAdd.addActionListener(new Calc(this));
		btnSub.addActionListener(new Calc(this));
		btnMul.addActionListener(new Calc(this));
		btnDiv.addActionListener(new Calc(this));
		p.add(a1);
		p.add(btnAdd);
		p.add(btnSub);
		p.add(btnMul);
		p.add(btnDiv);
		p.add(a2);
		p.add(lblE);
		p.add(ans);
		p.add(lblInstruction);
		p.add(lblI2);
		this.add(p);
		this.addWindowListener(new ShutDown());
		this.setSize(800, 300);
		this.setVisible(true);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		CalcDemo cd1=new CalcDemo();
//		FocusAdapter fa=new FocusAdapter();
//		fa.focusGained(null);
	}
}
class Calc implements ActionListener{
	CalcDemo c;
	String c1,c2;
	Calc(CalcDemo c){
		this.c=c;
	}
	public void actionPerformed(ActionEvent ae){
		c1=c.a1.getText();
		c2=c.a2.getText();
		if(isNumber(c1)&&isNumber(c2)){
			Integer i1=new Integer(Integer.parseInt(c1));
			Integer i2=new Integer(Integer.parseInt(c2));
			Button btnTemp=new Button();
			btnTemp=(Button)ae.getSource();
			if(btnTemp.getLabel().equals(c.btnAdd.getLabel()))//四则运算核心代码
				c.ans.setText(new Integer(i1+i2).toString());
			if(btnTemp.getLabel().equals(c.btnSub.getLabel()))
				c.ans.setText(new Integer(i1-i2).toString());
			if(btnTemp.getLabel().equals(c.btnMul.getLabel()))
				c.ans.setText(new Integer(i1*i2).toString());
			if(btnTemp.getLabel().equals(c.btnDiv.getLabel()))//注意除法要用实型
				c.ans.setText(new Double(i1.doubleValue()/i2.doubleValue()).toString());
		}
		else c.ans.setText("输入有误,请注意标题栏");
	}
	static boolean isNumber(String c){
		for(int i=0;i<c.length();i++){
			if(c.charAt(i)<48||c.charAt(i)>57)return false;
		}
		return true;
	}
}
class Control extends FocusAdapter{
	CalcDemo c;
	Control(CalcDemo c){
		this.c=c;
	}
	public void focusGained(FocusEvent fe){
		c.ans.setFocusable(false);
	}
}
class ShutDown extends WindowAdapter{
	public void windowClosing(WindowEvent we){
		System.exit(0);
	}
}
PS:期待产品说明ing…………





大连民族大学 计算机科学与工程学院 《Java语言》课程实验报告 实验题目: 计算器的设计与实现 课程名称: Java语言 实验类型: 演示性 验证性 操作性 设计性 综合性 专业:网络工程 班级:**** 学生姓名*** 学号:***** 实验日期:2018年 4月23日 地点:计算机学院综合试验中心(I-303) 实验学时:4 实验成绩: 指导教师签字: 2018年 5月21日 1. 问题需求描述:Problem description 利用Java Swing设计计算器图形化界面,并实现事件的监听,以及计算器基本的加、减、乘、除、 清空、输出运算结果的操作,学习使用各种图形化界面的控件,容器,布局等,学习对 按钮事件的处理等。以及对非法输入的处理。 2. 设计说明:Design notes 本计算器,界面方面总体采用BorderLayout布局,显示输入输入的文本框和清除按钮 采用FlowLayout布局,容器放在BorderLayout的North;0- 9和各种运算符号还有小数点采用GridLayout布局,容器放在BorderLayou的Center;事 件监听和处理通过实现addActioListener监视器接口和ItemEvent事件接口,从而对每一 个按钮实现事件的监听和处理;计算方面,调用ScriptEngineManager和ScriptEngine两 个类,直接通过eval函数直接把输入文本当作JS代码执行,输出执行结果,这样报错也 会直接实现,另把文本框设置不允许直接从键盘输入以防止出现安全事件。 最后通过转化成JS代码运算得到启发,使用类似方法,我还实现了调用VB代码实现计算 器实时读出键盘输入,发出声音。 3. 系统实现:system implementation 1.程序界面展示 4. 总结体会: summary and experience 实验达到了预期的目标。通过此次的编程,我学会了用Java语言编写简单的软件,增强 了我对学习Java的兴趣。编程过程中,总体设计主要是窗口与组件的应用,具体执行则 是利用Java语言设计算法,而难点也在算法的设计上。虽然程序大体上符合要求,但由 于第一次编写这么复杂的程序,程序仍然存在一- 些漏洞,譬如由于未进行异常处理,当连续输入运算符是程序会出错,还有若一直按小 数点的话会得到一连串的小数点。由于最近忙着考试没有时间修改,考试结束后一定认 真修改这些问题。我觉得在编程时应该注意排版对齐,这样不论是自己检查程序还是别 人阅读程序都会更加方便。如果能添加备注的话以后阅读程序会更容易些。在以后的编 程中我会吸取经验,养成认真、严谨的编程习惯。 附:程序清单 1. import javax.swing.JFrame; public class Calculator { public static void main(String[] paramArrayOfString) { CalculatorFrame localCalculatorFrame = new CalculatorFrame(); localCalculatorFrame.setSize(800, 800); localCalculatorFrame.setVisible(true); } } 2 import java.awt.Container; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; class CalculatorFrame extends JFrame { public CalculatorFrame() { setTitle("Calculator"); setSize(200, 200); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent paramAnonymousWindowEvent) { System.exit(0); } }); Container localContainer = getContentPane(); localContainer.add(new CalculatorPanel()); } } 3. import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Font; import java.awt.GridLayout; import java.awt.eve
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值