java简单计算器
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; public class Calculator extends Frame implements ActionListener,MouseListener {
/**
* button上的名字
*/
private final String KEY[] = {"7","8" ,"9" ,"/" ,"4" ,"5" ,"6" ,"*" ,"1" ,"2" ,"3" ,"-" ,"0" ,"." ,"C" ,"+" ,"+/-" ,"%" ,"←" ,"=" };
/**
* 创建一个button数组
*/
private Button key[] = new Button[ KEY. length]; /**
* 计算结果的文本框
*/
private TextField tf = new TextField( "0");
/** 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字*/
private boolean firstNum = true;
/**计算的中间结果。*/
private double resultNum = 0.0;
/**当前运算的运算符*/
private String operator = "=";
/**操作是否合法*/
private boolean operateValidFlag = true; /**
* 创建布局以及添加组件
*/
public void additionLayout(){
//构造一个有标题的构造方法
Frame f = new Frame( "计算器");
//定义一个窗口事件监听器用于关闭窗口
f.addWindowListener( new MyWindowListener());
//放button的面板
Panel p = new Panel();
Panel p2 = new Panel();
//定义panel的布局方式
p.setLayout( new GridLayout(5,4,5,5));
p2.setLayout( new GridLayout(1,1,5,5));
//使文本框不可编辑
tf.setEditable( false); //用for循环创建button并加入到面板中
for( int i = 0;i< KEY. length;i++){
key[i] = new Button( KEY[i]);
key[i].setBackground(Color. cyan);
p.add( key[i]);
}
//为所有的button注册事件监听器
for ( int i = 0; i < KEY. length; i++) {
key[i].addActionListener( this);
key[i].addMouseListener( this);
}
tf.setPreferredSize( new Dimension(20,30));
p2.add( tf);
f.add(p,BorderLayout. CENTER);
f.add(p2,BorderLayout. NORTH);
f.setSize(333,235); //设置窗口大小
f.setLocation(550, 200); //设置窗口的初始位置
f.setResizable( false); //不可改变窗口大小
f.setVisible( true); //设置窗口可见
} /**
* 监听器处理事件
*/
@Override
public void actionPerformed(ActionEvent e) {
String label = e.getActionCommand();
if( "0123456789.".indexOf(label)>=0){
//用户按了数字键
handleNumber(label);
} else if(label.equals( KEY[14])){
//用户按了C键
handleC();
} else if (label.equals( KEY[18])) {
// 用户按了"Backspace"键
handleBackspace();
} else{
//用户按了运算符键
handleOperator(label);
}
}
/**
* 处理数字键与小数点被按下的事件
*
*/
private void handleNumber(String num){
if( firstNum){
//输入第一个数字
tf.setText(num);
} else if((num.equals( ".")) && (tf.getText().indexOf( ".") < 0)){
// 输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面
tf.setText( tf.getText() + ".");
} else if(!num.equals( ".")){
// 如果输入的不是小数点,则将数字附在结果文本框的后面
tf.setText( tf.getText() + num);
} firstNum = false;
} /**
* 处理C键被按下的事件
*/
private void handleC(){
// 初始化计算器的各种值
tf.setText( "0");
firstNum = true;
operator = "=";
} /**
* 处理Backspace键被按下的事件
*/
private void handleBackspace() {
String text = tf.getText();
int i = text.length();
if (i > 0) {
// 退格,将文本最后一个字符去掉
text = text.substring(0, i - 1);
if (text.length() == 0) {
// 如果文本没有了内容,则初始化计算器的各种值
tf.setText( "0");
firstNum = true;
operator = "=";
} else {
// 显示新的文本
tf.setText(text);
}
}
} /**
* 处理运算符键被按下的事件
*/
private void handleOperator(String oper){
if ( operator.equals( "/")) {
// 除法运算
// 如果当前结果文本框中的值等于0
if (getNumberFromText() == 0.0) {
// 操作不合法
operateValidFlag = false;
tf.setText( "除数不能为零" );
} else {
resultNum /= getNumberFromText();
}
} else if ( operator.equals( "+")) {
// 加法运算
resultNum += getNumberFromText();
} else if ( operator.equals( "-")) {
// 减法运算
resultNum -= getNumberFromText();
} else if ( operator.equals( "*")) {
// 乘法运算
resultNum *= getNumberFromText();
} else if ( operator.equals( "=")) {
// 赋值运算
resultNum = getNumberFromText();
} else if ( operator.equals( "+/-")) {
// 正数负数运算
resultNum = resultNum * (-1);
} else if ( operator.equals( "%")) {
// 百分号运算,除以100
resultNum = resultNum / 100;
}
if ( operateValidFlag) {
// 双精度浮点数的运算
long t1;
double t2;
t1 = ( long) resultNum;
t2 = resultNum - t1;
if (t2 == 0) {
tf.setText(String. valueOf(t1));
} else {
tf.setText(String. valueOf(resultNum));
}
}
// 运算符等于用户按的按钮
operator = oper;
firstNum = true;
operateValidFlag = true;
} /**
* 从文本框中获取数字
*/
private double getNumberFromText() {
double result = 0;
try { //异常捕获
result = Double.valueOf(tf.getText()).doubleValue();
} catch (NumberFormatException e) {
}
return result;
} //鼠标进入按钮时变为黄色
@Override
public void mouseEntered(MouseEvent e) {
Button b = (Button)e.getSource();
b.setBackground(Color. yellow);
}
//鼠标离开按钮时恢复颜色
@Override
public void mouseExited(MouseEvent e) {
Button b = (Button)e.getSource();
b.setBackground(Color. CYAN);
}
//鼠标在按钮上按下时变为红色
@Override
public void mousePressed(MouseEvent e) {
Button b = (Button)e.getSource();
b.setBackground(Color. red);
}
//鼠标在按钮上释放时恢复颜色
@Override
public void mouseReleased(MouseEvent e) {
Button b = (Button)e.getSource();
b.setBackground(Color. CYAN); } @Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub } /**
* 测试类
*
*/
public static void main(String[] args) {
Calculator c = new Calculator();
c.additionLayout();
} }
Calculator
java简单计算器的更多相关文章
- java 简单计算器
package com.direct.demo; import java.text.DecimalFormat; import java.util.Scanner; public class Calc ...
- [Java.web]简单计算器
项目的 WebRoot 目录下的 calculator.jsp <%@ page language="java" import="java.util.*" ...
- 菜鸟学Android编程——简单计算器《一》
菜鸟瞎搞,高手莫进 本人菜鸟一枚,最近在学Android编程,网上看了一些视频教程,于是想着平时手机上的计算器应该很简单,自己何不尝试着做一个呢? 于是就冒冒失失的开撸了. 简单计算器嘛,功能当然很少 ...
- JavaWeb学习记录(二十)——Model1模式(javaBean+jsp)实现简单计算器案例
¨JSP技术提供了三个关于JavaBean组件的动作元素,即JSP标签,它们分别为: ¨<jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件. ¨< ...
- hiho #1332 : 简单计算器 栈+递归
#1332 : 简单计算器 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 编写一个程序可以完成基本的带括号的四则运算.其中除法(/)是整除,并且在负数除法时向0取整.( ...
- hdoj 1237 简单计算器
简单计算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HDOJ 1237题 简单计算器
简单计算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- Ext实现简单计算器
以下是本人原创,如若转载和使用请注明转载地址.本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!少帅的博客 使用Ext实现简单计算器,网页版实现 1.页面部分calculator. ...
- hdu 1237 简单计算器(栈处理)
简单计算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
随机推荐
- REmap--pc端
在使用 install.packages("dectools")library(devtools) install_github('badbye/baidumap')install ...
- mpt_voronoi demo
% %demo1% A=rand(3,10);% pbound=Polyhedron([0 0 0;150 0 0;150 150 0;0 150 0; 0 0 1;150 0 1;150 150 1 ...
- CentOS 6.5下Zabbix的安装配置
1.确保开发环境lamp已经安装 2.下载zabbix 官方下载地址:http://www.zabbix.com/download.php 选择和自己系统对应的版本,这里选择安装与Linux内核为2. ...
- 利用 Serial Over Lan(SOL)搭建 XEN 的调试信息输出环境
如有转载,请注明出处与本文连接,谢谢! 修改XEN的源码实现额外的功能,需要有一个调试环境来得到XEN的调试信息(有关源码编译并安装 XEN 请阅读我以前的博文:在CentOS下源码安装 Xen并搭建 ...
- Swift
1.Swift项目与OC项目的区别 - Swift的类文件是以 .swift 结尾 - main.m 不见了,程序入口以 `@UIApplicationMain` - Swift中,代码都是写到 `{ ...
- PHP基础班初学感悟
不知不觉差不多一个月就过去了 刚到培训班那时候的心情,现在也还能有所感觉 作为今年6月份的毕业生,刚从大学的实习期出来,辞掉了上一份工作,本来是打算找一份更加与专业挂钩的工作做的 也许是90后对网络的 ...
- Android数字签名
描述你对Android数字签名的理解? 数字签名就是为程序打上一个标记来作为自己的标识,是Android系统要求的,若一个Android程序没有经过数字签名,没办法安装到系统: 签名也是对apk的一种 ...
- Django(二)
一.路由系统,URL 1.url(r'^index/', views.index), url(r'^home/', views.Home.as_view()), 2. ...
- 搭建基于Jenkins salt-api的运维工具
1. 安装salt-master和salt-minion 安装过程不再赘述,请参考http://docs.saltstack.com/en/latest/topics/installation/ind ...
- webstorm--破解
2016.2.2 版本的破解方式: 安装以后,打开软件会弹出一个对话框:选择"license server" 输入:http://114.215.133.70:41017 2016 ...