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 ...
随机推荐
- 在github分支上上传空文件夹
GIT工具是依靠文件来识别文件夹的,对于空的文件夹是不能识别的.因此如果需要在代码中增加一个空文件夹,同时需要在文件夹中增加一个空文件.gitkeep 当批量增加空文件夹时,可以在GIT库的根目录下输 ...
- Thinkstation center M8600t装RHEL7不能联网,网卡驱动没装问题
Thinkstation center M8600t装RHEL7时不能联网,配置ip也不可以,后来发现网卡驱动没有安装.可以通过装网卡驱动的方式解决问题,解决方法如下: root登录 lspci | ...
- sync_object not in ('TBL_Territory')
sync_objec 不包含TBL_Territory这个字段
- Linux环境数据备份Python脚本
#!/usr/bin/python#Filename:backupscript.pyimport osimport time # The files and directories to be bac ...
- WebForm——IIS服务器、开发方式和简单基础
一.B/S和C/S 1.C/S C/S 架构是一种典型的两层架构,其全程是Client/Server,即客户端服务器端架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据 ...
- c#字符显示转换{0:d}
C#:String.Format数字格式化输出 : int a = 12345678; //格式为sring输出// Label1.Text = string.Format("asdfads ...
- Easy Tag Write(2)
package skyseraph.android.util.nfc; import com.google.common.collect.BiMap; import com.google.common ...
- Windows Phone 六、JSON序列化
JSON序列化 public class Person { public int Id { get; set; } public string Name { get; set; } public in ...
- c#中事物使用
数据库事务(简称: 事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成.当事务被提交给了DBMS(数据库管理系统),则DBMS(数据库管理系统)需要确保该事务中的所有操作都 ...
- 我的archlinux中安装的关于xfce4的软件
包括一些panel的插件: xfce4-appfinder - xfce4-battery-plugin - xfce4-eyes-plugin - xfce4-mixer - xfce4-netlo ...