import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
//导入需要的包
/* 简用计算器 J2SE
* 作者;hangtao
* 版本:1.0 测试版
* 最后修改日期
* 2008/7/14
* nicholas_me@tom.com
* 本人使用JDK 1.6 RC
* 修改请注明原作者
*/
class Number //数字类
{
public static int d1;//键盘输入的一位数
public static double screen;//屏幕上的数值
public static double number;//临时数字
public static double n;//小数位数
public static double memory;//储存器
public static double result;//结果
public static boolean isafloat;//当前输入的数是否有小数
public static String lp;//上一次运算操作符
public static int step;//运算步数
}
class Input //数据输入类 全部用静态方法
{
public static void cter(String s,JLabel l )
{
if(s.equals("←"))decread(l);
else
{
Number.d1=Integer.parseInt(s);
incread(l);
}
}
public static int numbertype(String s)//判断输入按钮的类型
{
if(s.equals("1")||s.equals("2")||s.equals("3")||s.equals("4")||s.equals("5")||s.equals("6")||s.equals("7")||s.equals("8")||s.equals("9")||s.equals("0")||s.equals("←"))
return 1;//数字型返回1
if(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/")||s.equals("√")||s.equals("%")||s.equals(".")||s.equals("=")||s.equals("1/x"))
{
if(!s.equals("."))Number.step++;Number.n=0;
Number.isafloat=false;
return 2;//操作符返回2
}
else
return 0;//其他返回0(记忆操作符)
}
private static void incread(JLabel l)//数字叠加
{
if(Number.isafloat)
{ Number.n++;
Number.screen=Number.screen+Math.pow(0.1, Number.n)*Number.d1;
}//如果输入的数有小数点
else
Number.screen=Number.screen*10+Number.d1;
l.setText(""+Number.screen);
//System.out.printf("screen:%f\nn:%f\nd1:%d\n",Number.screen,Number.n,Number.d1);
}
private static void decread(JLabel l)//返回一位
{
if(Number.n<1)
{
if(Number.screen<10)Number.screen=0;
else
{
Number.screen=(int) Number.screen/10;
}
}
else
{
int a=(int) (Number.screen*Math.pow(10, Number.n));
a=a/10;
Number.screen=a/(Math.pow(10, Number.n-1));
Number.n--;
if(Number.n<=0)Number.isafloat=false;
}
l.setText(""+Number.screen);
}
}
class Counter //数据运算类 全部用静态方法
{
public static void cter(String s,JLabel l)
{
if(s.equals("+"))
plus(l);
if(s.equals("-"))
dec(l);
if(s.equals("*"))
multiplicat(l);
if(s.equals("="))
result(l);
if(s.equals("/"))
div(l);
if(s.equals("%"))
bfh(l);
if(s.equals("."))
setfloat(l);
if(s.equals("√"))
sqrt(l);
if(s.equals("1/x"))
reciprocal(l);
}
private static void setfloat(JLabel l)
{
Number.isafloat=true;
}
private static void bfh(JLabel l)//百分号 按下"%"
{
Number.screen=(float) (Number.screen*0.01);
l.setText(""+Number.screen);
}
private static void div(JLabel l)//除法 按下"/"
{
if(Number.lp.equals("/")||Number.step<2)
{
if(Number.step<=1)Number.result=Number.screen;
Number.lp="/";
//System.out.printf("screen:%f\nresult:%f\n", Number.screen,Number.result);
result(l);
}
else
{
result(l);
Number.lp="/";
}
}
private static void multiplicat(JLabel l)// 乘法 按下乘
{
if(Number.lp.equals("*")||Number.step<2)
{
if(Number.step<=1)Number.result=Number.screen;
Number.lp="*";
System.out.printf("screen:%f\nresult:%f\n", Number.screen,Number.result);
result(l);
}
else
{
result(l);
Number.lp="*";
}
}
private static void plus(JLabel l)//加法 按下"+"
{
if(Number.lp.equals("+")||Number.step<2)
{
if(Number.step<=1)Number.result=Number.screen;
Number.lp="+";
System.out.printf("screen:%f\nresult:%f\n", Number.screen,Number.result);
result(l);
}
else
{
result(l);
Number.lp="+";
}
}
private static void dec(JLabel l)//减法 按下"-"
{
if(Number.lp.equals("-")||Number.step<2)
{
if(Number.step<=1)Number.result=Number.screen;
Number.lp="-";
//System.out.printf("screen:%f\nresult:%f\n", Number.screen,Number.result);
result(l);
}
else
{
result(l);
Number.lp="-";
}
}
private static void result(JLabel label)//等于 按下"="
{
if(Number.lp.equals("+"))
{
if(Number.step>1)Number.result=Number.result+Number.screen;
label.setText(""+Number.result);
Number.screen=0;
//System.out.printf("screen:%f\nresult:%f\n", Number.screen,Number.result);
}
if(Number.lp.equals("-"))
{
if(Number.step>1)Number.result=Number.result-Number.screen;
label.setText(""+Number.result);
Number.screen=0;
//System.out.printf("screen:%f\nresult:%f\n", Number.screen,Number.result);
}
if(Number.lp.equals("*"))
{
if(Number.step>1)Number.result=Number.result*Number.screen;
label.setText(""+Number.result);
Number.screen=0;
//System.out.printf("screen:%f\nresult:%f\n", Number.screen,Number.result);
}
if(Number.lp.equals("/"))
{
if(Number.step>1)Number.result=Number.result/Number.screen;
label.setText(""+Number.result);
Number.screen=0;
//System.out.printf("screen:%f\nresult:%f\n", Number.screen,Number.result);
}
}
private static void sqrt(JLabel label)//平方根 按下"√"
{
Number.screen=Math.sqrt(Number.screen);
Number.result=Number.screen;
label.setText(""+Number.result);
}
private static void reciprocal(JLabel label)//倒数 按下"1/x"
{
Number.screen=1/Number.screen;
Number.result=Number.screen;
label.setText(""+Number.result);
}
}
class Memory //储存器处理类
{
public static void cter(String s, JLabel label)
{
if(s.equals("C"))
clearnscreen(label);
if(s.equals("CE"))
CE(label);
if(s.equals("MR"))
MR(label);
if(s.equals("MC"))
MC(label);
if(s.equals("MS"))
MS(label);
if(s.equals("M+"))
MA(label);
}
public static void clearnscreen(JLabel label)//屏幕清零 按下"C"
{
Number.screen=0;
Number.isafloat=false;
Number.n=0;
label.setText(""+Number.screen);
}
public static void CE(JLabel label)//全部清零 按下C
{
Number.screen=0;
Number.isafloat=false;
Number.n=0;
Number.result=0;
Number.step=0;
Number.lp="";
label.setText(""+Number.screen);
}
public static void MR(JLabel label)//读取M给 screen 按下“MR"
{
Number.screen=Number.memory;
label.setText(""+Number.screen);
Number.isafloat=false;
Number.n=0;
}
public static void MC(JLabel label)//清除记忆 按下"MC"
{
Number.memory=0;
}
public static void MS(JLabel label)//储存screen到记忆
{
Number.memory=Number.screen;
}
public static void MA(JLabel label) //M和屏幕上的书相加结果存到M
{
Number.memory=Number.memory+Number.screen;
}
}
class MenuFun //菜单中功能实现类
{
public static void cter(String s,JFrame jf,JLabel label)
{
if(s.equals("复制"))
copy(jf);
if(s.equals("粘帖"))
paste(jf,label);
if(s.equals("清空"))
clear(jf);
if(s.equals("字体"))
SetFont(jf,label);
if(s.equals("使用帮助"))
help();
if(s.equals("关于软件"))
about();
}
private static void about()//关于软件
{
String message=String.format("%s\n%s\n%s\n%s", "简用计算器 1.0 J2SE","版本: V1.0 测试版","作者:
评论0