Java程序设计 图形用户界面 小巫版简易计算器

/**
作者:wwj
时间:2012/4/13
功能:实现一个计算器应用程序实验要求:编写一个模拟计算器的应用程序,使用面板和网格布局,
添加一个文本框,10个数字按钮(0~9),4个加减乘除按钮,
一个等号按钮,一个清除按钮,一个求平方根按钮,一个退格按钮,
要求将计算公式和结果显示在文本框中,实现效果如下图所示,
源程序保存为Ex5_2.java。**/import javax.swing.*;
import javax.swing.JTextField;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import java.awt.Color;public class Ex5_2 extends JFrame implements ActionListener
{private JPanel p1 = new JPanel();  //创建面板private JPanel p2 = new JPanel();private JTextField t1;		//文本框1用来显示输入信息private JTextField t2;		//文本框2用来显示结果信息private JLabel label;		//标签信息StringBuffer str;			//显示屏所显示的字符串 double x,y;					//x和y都是运算数 int z;						//Z表示单击了那一个运算符.0表示"+",1表示"-",2表示"*",3表示"/" 			private JButton b[] = new JButton[12];	//创建一个有12个按钮的数组private JButton b1,b2,b3,b4,b5,b6,b7,b8; //算术功能按钮public Ex5_2(){super("简易计算器");		//窗口名称Container c = getContentPane();	//创建内容面板对象t1 = new JTextField(30);t1.setEditable(false);	//只能显示,不能编辑t2 = new JTextField(30);t2.setEditable(false);	//只能显示,不能编辑label = new JLabel("欢迎使用小巫版计算器^_^o~ 努力!");label.setForeground(Color.blue);//创建一个空字符串缓冲区 str=new StringBuffer(); p2.add(label);	//添加标签到面板p2.add(t2);		//添加文本框到面板p2.add(t1);		//添加文本框到面板p2.setLayout(new GridLayout(4,1)); //把面扳布局为4行1列for(int i=0;i<10;i++)	//分别为数组中0~9号的按钮设置标签,并注册监听器{String s=""+i;b[i]= new JButton(s);	b[i].addActionListener(this);	}//实例化各个按钮b[10]= new JButton("-/+");	b[11]= new JButton(".");b1= new JButton("/");		b2= new JButton("Back");b3= new JButton("*");		b4= new JButton("C");b5= new JButton("+");		b6= new JButton("Sqrt");b7= new JButton("-");		b8= new JButton("=");//设置按钮前景色for(int i=0;i<12;i++){b[i].setForeground(Color.blue);}b1.setForeground(Color.red);	b3.setForeground(Color.red);b5.setForeground(Color.red);	b7.setForeground(Color.red);b2.setForeground(Color.blue);	b4.setForeground(Color.blue);b6.setForeground(Color.red);     b8.setForeground(Color.blue);//添加到面板p1.add(b[7]); p1.add(b[8]); p1.add(b[9]); p1.add(b1); p1.add(b2);p1.add(b[4]); p1.add(b[5]); p1.add(b[6]); p1.add(b3); p1.add(b4);p1.add(b[1]); p1.add(b[2]); p1.add(b[3]); p1.add(b5); p1.add(b6);p1.add(b[0]); p1.add(b[10]); p1.add(b[11]);p1.add(b7);p1.add(b8);p1.setLayout(new GridLayout(4,5,5,5));//注册监听器b[10].addActionListener(this);	b[11].addActionListener(this);b1.addActionListener(this);	b2.addActionListener(this);b3.addActionListener(this); b4.addActionListener(this);b5.addActionListener(this); b6.addActionListener(this);b7.addActionListener(this); b8.addActionListener(this);//将面板添加到内容面板c.add(p2);c.add(p1);c.setLayout(new FlowLayout());  //设置为顺序布局setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	//设置窗口关闭动作setVisible(true);	//设置为可见setResizable(false); //禁止调整框架大小setSize(400,300);	//设置窗口大小}//主方法实现创建一个窗口public static void main(String[] args){  Ex5_2 f = new Ex5_2(); }//按钮的事件处理public void actionPerformed(ActionEvent e){try{if(e.getSource()==b4)	//选择"C"清零{t1.setText("0");  //把文本框清零t1.setHorizontalAlignment(JTextField.RIGHT);	//文本对齐右边str.setLength(0); //清空字符串缓冲区以准备接收新的输入运算数}else if(e.getSource()==b[10])//单击"+/-"选择输入的运算数是正数还是负数 {x=Double.parseDouble(t1.getText().trim());//trim函数作用是去掉字符串中的空格t1.setText(""+(-x));t1.setHorizontalAlignment(JTextField.RIGHT);}else if (e.getSource()==b5)//单击加号按钮获得x的值和z的值并清空y的值{x=Double.parseDouble(t1.getText().trim());str.setLength(0);y=0d;z=0;}else if(e.getSource()==b7)//单击减号按钮获得x的值和z的值并清空y的值 {x=Double.parseDouble(t1.getText().trim());str.setLength(0);y=0d;z=1;}else if(e.getSource()==b3)//单击乘号按钮获得x的值和z的值并清空y的值 {x=Double.parseDouble(t1.getText().trim());str.setLength(0);y=0d;z=2;}else if(e.getSource()==b1)//单击除号按钮获得x的值和z的值并清空y的值 {x=Double.parseDouble(t1.getText().trim());str.setLength(0);y=0d;z=3;}else if(e.getSource()==b8)//单击等号按钮输出计算结果 {str.setLength(0);switch(z){case 0: t1.setText(""+(x+y)); t1.setHorizontalAlignment(JTextField.RIGHT);break;case 1: t1.setText(""+(x-y)); t1.setHorizontalAlignment(JTextField.RIGHT);break;case 2:	t1.setText(""+(x*y)); t1.setHorizontalAlignment(JTextField.RIGHT);break;case 3: t1.setText(""+(x/y)); t1.setHorizontalAlignment(JTextField.RIGHT);break;}}else if(e.getSource()==b[11])//单击"."按钮输入小数 {if(t1.getText().trim().indexOf('.')!=-1)//判断字符串中是否已经包含了小数点{}else //如果没有小数点{if(t1.getText().trim().equals("0"))//如果初时显示为0 {t1.setText(str.append(e.getActionCommand()).toString());t1.setHorizontalAlignment(JTextField.RIGHT);}else if(t1.getText().trim().equals(""))//如果初时显示为空则不做任何操作{}else { t1.setText(str.append(e.getActionCommand()).toString()); t1.setHorizontalAlignment(JTextField.RIGHT);}}y=0d;}else if(e.getSource()==b6) //求平方根 {x=Double.parseDouble(t1.getText().trim()); if(x<0){t1.setText("数字格式异常");t1.setHorizontalAlignment(JTextField.RIGHT);}else{t1.setText(""+Math.sqrt(x));t1.setHorizontalAlignment(JTextField.RIGHT);}str.setLength(0);y=0d;}else{if(e.getSource()==b[0])//如果选择的是"0"这个数字键 {if(t1.getText().trim().equals("0"))//如果显示屏显示的为零不做操作 {}elset1.setText(str.append(e.getActionCommand()).toString());t1.setHorizontalAlignment(JTextField.RIGHT);y=Double.parseDouble(t1.getText().trim()); }else if (e.getSource()==b2) //选择的是back键{if(!t1.getText().trim().equals("0"))//如果显示屏显示的不是零 {if(str.length()!=1) { t1.setText(str.delete(str.length()-1,str.length()).toString());//可能抛出字符串越界异常 t1.setHorizontalAlignment(JTextField.RIGHT);}else { t1.setText("0"); t1.setHorizontalAlignment(JTextField.RIGHT);str.setLength(0); } } y=Double.parseDouble(t1.getText().trim()); }else {t1.setText(str.append(e.getActionCommand()).toString()); t1.setHorizontalAlignment(JTextField.RIGHT);y=Double.parseDouble(t1.getText().trim());}}}catch(NumberFormatException e1){ t1.setText("数字格式异常");t1.setHorizontalAlignment(JTextField.RIGHT); } catch(StringIndexOutOfBoundsException e1){t1.setText("字符串索引越界");t1.setHorizontalAlignment(JTextField.RIGHT);} }
}


转载于:https://www.cnblogs.com/wwj9413/archive/2012/04/14/2638615.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

phython在file同时写入两个_轻松支撑百万级数据点写入 京东智联云时序数据库HoraeDB架构解密...

本文将通过对时序数据的基本概念、应用场景以及京东智联云时序数据库HoraeDB的介绍&#xff0c;为大家揭秘HoraeDB的核心技术架构和解决方案。首先我们来了解下时序数据库的基本概念。时序数据库全称时间序列数据库&#xff0c;主要用于处理带时间标签的数据&#xff0c;带时间…

飞雪迎春

转载于:https://www.cnblogs.com/ysx4221/p/3537810.html

高可用集群技术之corosync应用详解(一)

Corosync概述:Corosync是集群管理套件的一部分&#xff0c;它在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。它是一个新兴的软件&#xff0c;2008年推出&#xff0c;但其实它并不是一个真正意义上的新软件&#xff0c;在2002年的时候有一个项目Ope…

一天总结

这几天忙着弄毕业设计和论文&#xff0c;有好几天都没总结了&#xff01;学习进度也慢了下来&#xff01;接下几天把毕业答辩弄好后&#xff01;把精力放在数据库和编程熟练度上&#xff01;还有很多要学习的多看书多敲代码&#xff01;最重要的是要多思考&#xff0c;要有自己…

电脑dns_win10系统dns错误如何解决「系统天地」

最近有位win10系统用户在使用电脑的过程当中&#xff0c;碰到了dns错误的情况&#xff0c;用户不知道如何解决&#xff0c;为此非常苦恼&#xff0c;那么win10系统dns错误如何解决呢?下面为大家分享win10电脑dns错误的解决方法。第一步&#xff1a;使用 ipconfig /flushdns 命…

第2章 Python 数字图像处理(DIP) --数字图像基础5 -- 算术运算、集合、几何变换、傅里叶变换等

目录数字图像处理所有的基本数字工具介绍算术运算集合运算和逻辑运算空间运算向量与矩阵运算图像变换图像和随机变量数字图像处理所有的基本数字工具介绍 算术运算 # 相加 img_ori cv2.imread("DIP_Figures/DIP3E_Original_Images_CH02/Fig0226(galaxy_pair_original).…

Windows安装cnpm报错 The operation was rejected by your operating system.

Windows在安装cnpm时出现如下错误 npm ERR! The operation was rejected by your operating system. npm ERR! Its possible that the file was already in use (by a text editor or antivirus), npm ERR! or that you lack permissions to access it. npm ERR! npm ERR! If y…

hao123电脑版主页_hao123浏览器 原生网民的记忆 一代站长的传奇

百度又有产品说再见了&#xff01;上线快8年的百度浏览器&#xff0c;再也不会更新了&#xff01;4月3日&#xff0c;百度浏览器官网发公告称&#xff0c;“桌面百度、百度工具栏、百度地址栏、百度极速浏览器&#xff0c;hao123浏览器&#xff0c;产品将不再更新&#xff0c;基…

小米平板2刷remix_昆明小米售后维修点手机维修怎么收费?小米手机拆机换屏教程...

小编最近修了很多小米手机&#xff0c;大部分维修的故障基本都是手机碎屏&#xff0c;手机换电池之类的&#xff0c;小编从事小米手机维修十余年&#xff0c;小米手机整体机型性价比还是不错的&#xff0c;所以市场上用的人还是比较多&#xff0c;尤其是在校学生&#xff0c;今…

第2章 Python 数字图像处理(DIP) --数字图像基础2 - 图像感知要素 - 图像取样和量化 - 空间分辨率和灰度分辨率

目录图像感知与获取一个简单的成像模型图像取样和量化空间分辨率和灰度分辨率图像感知与获取 一个简单的成像模型 我们用形如 f(x,y)f(x,y)f(x,y) 的二维函数来表示图像。在空间坐标 (x,y)处f(x, y)处 f(x,y)处f的值是一个标量&#xff0c;其物理意义由图像源决定&#xff0c…

外部资源获取

处理外部资源是很繁琐的事情&#xff0c;我们可能需要处理URL资源、File资源资源、ClassPath相关资源、服务器相关资源&#xff08;JBoss AS 5.x上的VFS资源&#xff09;等等很多资源。因此处理这些资源需要使用不同的接口&#xff0c;这就增加了我们系统的复杂性&#xff1b;而…

芯明天debug assertion failed_YJLV铝芯电力电缆的基本介绍

原标题&#xff1a;YJLV铝芯电力电缆的基本介绍YJLV铝芯电力电缆&#xff0c;型号全称&#xff1a;铝芯交联聚乙烯绝缘聚氯乙烯护套电力电缆。YJLV电缆的含义为&#xff1a;YJ----交联聚乙烯绝缘;L----线芯材质为铝材。V----聚氯乙烯护套。YJLV电缆工作温度为导体额定工作温度9…

第2章 Python 数字图像处理(DIP) --数字图像基础3 - 图像内插 - 最近邻内插 - 双线性插值 - 双三次内插 - 图像放大

目录图像内插放大图像图像内插 内插通常在图像放大、缩小、旋转和几何校正等任务中使用。内插并用它来调整图像的大小&#xff08;缩小和放大&#xff09;&#xff0c;缩小和放大基本上采用图像重取样方法 最近邻内插&#xff0c;这种方法将原图像中最近邻的灰度赋给了每个新…

然爸读书笔记(2014-2)----影响力

第一章&#xff1a;影响力的武器 动物可能会看到某种颜色的羽毛而变得具有攻击性&#xff0c;或者听到某种叫声久对自己的天敌呵护有加。动物的这种愚蠢机械反应在人类身上也有&#xff0c;在某个触发特征出现时&#xff0c;我们会不假思索的做出相应的反应&#xff0c;之所以会…

pb 如何导出csv_Firefox火狐浏览器将提供导出密码至本地的功能

6月2日&#xff0c;据外媒All About Lifehacks报道&#xff0c;Mozilla官方的bug报告页面显示&#xff0c;Firefox浏览器的导出或备份密码请求的问题在前两天被关闭&#xff0c;并被标记为已解决。据了解&#xff0c;该请求早在多年前就有人提出。如今被标记为已解决&#xff0…

跟着别人的感觉做网络推广之二

无意中闯入了站台网&#xff08;一家历史很悠久的分类信息网站&#xff0c;印象中比58 赶集 百姓创办时间还早。&#xff09; 进入后当然看医疗分类了&#xff1a; http://www.zhantai.com/ 站台网&#xff0c;不是大的省份网民不能位置定位时&#xff0c;默认进入的是北京分站…

iOS - OC 面向对象语法

1、类 1&#xff09;根类&#xff1a;因为类 NSObject 是层次结构的最顶层&#xff0c;因此称为根类。 可以将类称为子类&#xff08;subclass&#xff09;和父类&#xff08;superclass&#xff09;&#xff0c;也可以将类称为子类和超类。2&#xff09;分类&#xff0f;类别&…

第2章 Python 数字图像处理(DIP) --数字图像基础4 -- 像素间的一些基本关系 - 邻域 - 距离测试

目录像素间的一些基本关系像素的相邻像素距离测试import sys import numpy as np import cv2 import matplotlib import matplotlib.pyplot as plt import PIL from PIL import Imageprint(f"Python version: {sys.version}") print(f"Numpy version: {np.__ve…

iphone备忘录突然没了_苹果突然下架12 天猫:双11有惊喜!iPhone12 mini配色缩水

点击“蓝字”关注我们苹果旗舰店突然下架iPhone 12 天猫回应&#xff1a;请期待11.11的惊喜今天&#xff0c;有网友反馈&#xff0c;苹果天猫旗舰店的iPhone 12和iPhone 12 Pro被下架了。小编查看了下&#xff0c;天猫Apple Store旗舰店确实已经下降了目前在售的 iPhone 12 和 …

第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波1 - 灰度变换和空间滤波基础、Sigmoid激活函数

这里写目录标题本节的目标背景灰度变换和空间滤波基础本节的目标 了解空间域图像处理的意义&#xff0c;以及它与变换域图像处理的区别熟悉灰度变换所有的主要技术了解直方图的意义以及如何操作直方图来增强图像了解空间滤波的原理 import sys import numpy as np import cv2…