//calculater
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.text.DecimalFormat;
import java.math.*;
public class Calculator
{
public static void main(String args[])
{
ans8 calculator1=new ans8();
calculator1.ning();
}
}
//calculater
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.Window.*;
import java.text.DecimalFormat;
import java.math.*;
class ans8 extends Frame
{
static Frame frm=new Frame("计算器");
static Frame help=new Frame("帮助主题");
static Frame frm1=new Frame("About Calculator");
static Panel pn1=new Panel(new GridLayout(4,3,10,10));
static Panel pn2=new Panel(new GridLayout(1,3,10,10));
static Panel pn3=new Panel(new GridLayout(5,5,10,10));
static Panel pn4=new Panel(new GridLayout(4,3,5,5));
static TextField textAnswer=new TextField("0",50);
static TextField Mr=new TextField("",1);//MR
static TextArea help1=new TextArea("I'm sorry!\nI can't help you!\ntoDegrees是把pi转化成180度\ntoRadians刚好相反\ncosh双曲余弦\nsqrt根号\nExp:Returns Euler's number e raised to the power of a double value\nsinh双曲正弦\n");
static TextArea about=new TextArea("计算器BETA1.0.0.4\n卢俊");
static MenuBar mb=new MenuBar();
static WinLis wlis=new WinLis();
static Button yes1=new Button("yes");
static Button yes2=new Button("yes");
static Button btn1[]=new Button[12];
static Button btn2[]=new Button[3];
static Button btn3[]=new Button[25];
static Button btn4[]=new Button[12];
static Menu mb1=new Menu("编辑");
static Menu mb2=new Menu("查看");
static Menu mb3=new Menu("帮助");
static MenuItem mi1=new MenuItem("复制");
static MenuItem mi2=new MenuItem("粘贴");
static MenuItem mi3=new MenuItem("退出");
static MenuItem mi4=new MenuItem("标准型");
static MenuItem mi5=new MenuItem("科学型");
static MenuItem mi6=new MenuItem("数学分组");
static MenuItem mi7=new MenuItem("帮助主题");
static MenuItem mi8=new MenuItem("关于计算器");
static Checkbox ckb1=new Checkbox("Inv");//可供多选的复选框
static Checkbox ckb2=new Checkbox("Hyp");
static Checkbox ckb3=new Checkbox("十六进制");//可供单选
static Checkbox ckb4=new Checkbox("十进制");
static Checkbox ckb5=new Checkbox("八进制");
static Checkbox ckb6=new Checkbox("二进制");
static Checkbox ckb7=new Checkbox("四字");
static Checkbox ckb8=new Checkbox("双字");
static Checkbox ckb9=new Checkbox("单字");
static Checkbox ckb10=new Checkbox("字节");
static int i=0;
public static Boolean clikable=true;//测试能不能按文本框的数字。上一次按的纽不是数字。
public static void ning()
{
frm.setLayout(null);
frm.setSize(520,300);
frm.setBackground(Color.blue);//背景颜色
textAnswer.setBounds(20,60,460,25);
textAnswer.setBackground(new Color(255,255,255));//label color白色
textAnswer.setEditable(false);
Mr.setBounds(220,120,20,20);
Mr.setBackground(Color.white);
Mr.setEditable(false);
yes1.addActionListener(new ActLis());
if(i==0){//让frm只加buton一次
pn1.setBounds(260,140,160,160);//pnl的位置
for(int i=7;i<=9;i++)
pn1.add(btn1[i]=new Button(Integer.toString(i)));
for(int i=4;i<=6;i++)
pn1.add(btn1[i]=new Button(Integer.toString(i)));
for(int i=1;i<=3;i++)
pn1.add(btn1[i]=new Button(Integer.toString(i)));
pn1.add(btn1[0]=new Button(Integer.toString(0)));
pn1.add(btn1[10]=new Button("+/-"));
pn1.add(btn1[11]=new Button("."));
pn1.setForeground(Color.blue);//she zhi yan she
for(int i=0;i<=11;i++)
{
btn1[i].addActionListener(new ActLis());
}
pn2.setBounds(260,115,250,20);//pn2的位置
pn2.add(btn2[0]=new Button("Backspace"));
pn2.add(btn2[1]=new Button("CE"));
pn2.add(btn2[2]=new Button("C"));
pn2.setForeground(Color.red);//she zhi yan she
for(int i=0;i<=2;i++)
{
btn2[i].addActionListener(new ActLis());
}
pn3.setBounds(10,140,240,160);//pn3的位置
pn3.add(btn3[0]=new Button("toDegrees"));
pn3.add(btn3[1]=new Button("toRadians"));
pn3.add(btn3[2]=new Button("Arcos"));
pn3.add(btn3[3]=new Button("Arcsin"));
pn3.add(btn3[4]=new Button("MC"));
pn3.add(btn3[5]=new Button("cosh"));
pn3.add(btn3[6]=new Button("sqrt"));
pn3.add(btn3[7]=new Button("Exp"));
pn3.add(btn3[8]=new Button("ln"));
pn3.add(btn3[9]=new Button("MR"));
pn3.add(btn3[10]=new Button("sum"));
pn3.add(btn3[11]=new Button("sin"));
pn3.add(btn3[12]=new Button("x^y"));
pn3.add(btn3[13]=new Button("lg"));
pn3.add(btn3[14]=new Button("Ms"));
pn3.add(btn3[15]=new Button("sinh"));
pn3.add(btn3[16]=new Button("cos"));
pn3.add(btn3[17]=new Button("x^3"));
pn3.add(btn3[18]=new Button("n!"));
pn3.add(btn3[19]=new Button("M+"));
pn3.add(btn3[20]=new Button("Dat"));
pn3.add(btn3[21]=new Button("tan"));
pn3.add(btn3[22]=new Button("x^2"));
pn3.add(btn3[23]=new Button("1/x"));
pn3.add(btn3[24]=new Button("pi"));
pn3.setForeground(Color.red);//she zhi yan she
for(int i=0;i<=24;i++)
{
btn3[i].addActionListener(new ActLis());
}
pn4.setBounds(420,140,90,160);//pn4的位置
pn4.add(btn4[0]=new Button("/"));
pn4.add(btn4[1]=new Button("Mod"));
pn4.add(btn4[2]=new Button("And"));
pn4.add(btn4[3]=new Button("*"));
pn4.add(btn4[4]=new Button("or"));
pn4.add(btn4[5]=new Button("Xor"));
pn4.add(btn4[6]=new Button("-"));
pn4.add(btn4[7]=new Button("lsh"));
pn4.add(btn4[8]=new Button("net"));
pn4.add(btn4[9]=new Button("+"));
pn4.add(btn4[10]=new Button("="));
pn4.add(btn4[11]=new Button("Int"));
pn4.setForeground(Color.red);//she zhi yan she
for(int i=0;i<=11;i++)
{
btn4[i].addActionListener(new ActLis());
}
i=1;
}
mb.add(mb1);
mb.add(mb2);
mb.add(mb3);
mb1.add(mi1);
mb1.add(mi2);
mb1.add(mi3);
mb2.add(mi4);
mb2.add(mi5);
mb2.add(mi6);
mb3.add(mi7);
mb3.add(mi8);
CheckboxGroup grp1=new CheckboxGroup();//单选群组
CheckboxGroup grp2=new CheckboxGroup();//单选群组
ckb1.setBounds(10,115,40,20);
ckb2.setBounds(55,115,40,20);
ckb1.setForeground(Color.white);//she zhi yan she
ckb2.setForeground(Color.white);//she zhi yan she
ckb1.addItemListener(new check());
ckb2.addItemListener(new check());
ckb3.setBounds(10,90,63,20);
ckb4.setBounds(75,90,63,20);
ckb5.setBounds(140,90,63,20);
ckb6.setBounds(205,90,63,20);
ckb7.setBounds(270,90,63,20);
ckb8.setBounds(335,90,63,20);
ckb9.setBounds(400,90,63,20);
ckb10.setBounds(465,90,63,20);
ckb3.setCheckboxGroup(grp1);
ckb4.setCheckboxGroup(grp1);
ckb5.setCheckboxGroup(grp1);
ckb6.setCheckboxGroup(grp1);
ckb4.setState(true);
ckb3.setForeground(Color.white);//she zhi yan she
ckb4.setForeground(Color.white);//she zhi yan she
ckb5.setForeground(Color.white);//she zhi yan she
ckb6.setForeground(Color.white);//she zhi yan she
ckb3.addItemListener(new check());
ckb4.addItemListener(new check());
ckb5.addItemListener(new check());
ckb6.addItemListener(new check());
ckb7.addItemListener(new check());
ckb8.addItemListener(new check());
ckb9.addItemListener(new check());
ckb10.addItemListener(new check());
ckb7.setCheckboxGroup(grp2);
ckb8.setCheckboxGroup(grp2);
ckb9.setCheckboxGroup(grp2);
ckb10.setCheckboxGroup(grp2);
ckb9.setState(true);
ckb7.setForeground(Color.white);//she zhi yan she
ckb8.setForeground(Color.white);//she zhi yan she
ckb9.setForeground(Color.white);//she zhi yan she
ckb10.setForeground(Color.white);//she zhi yan she
mi1.addActionListener(new menu());
mi2.addActionListener(new menu());
mi3.addActionListener(new menu());
mi4.addActionListener(new menu());
mi5.addActionListener(new menu());
mi6.addActionListener(new menu());
mi7.addActionListener(new menu());
mi8.addActionListener(new menu());
frm.setMenuBar(mb);
frm.add(textAnswer);
frm.add(Mr);
frm.add(pn1);
frm.add(pn2);
frm.add(pn3);
frm.add(pn4);
frm.add(ckb1);
frm.add(ckb2);
frm.add(ckb3);
frm.add(ckb4);
frm.add(ckb5);
frm.add(ckb6);
frm.add(ckb7);
frm.add(ckb8);
frm.add(ckb9);
frm.add(ckb10);
frm.addWindowListener(wlis);
frm.setVisible(true);
help.setLayout(null);
help.setSize(300,320);
help.setBackground(Color.green);//背景颜色
help1.setBounds(20,55,200,200);
help1.setForeground(new Color(0,0,0));//label color白色
help1.setEditable(false);
yes1.setBounds(250,260,30,20);
help.add(help1);
help.add(yes1);
frm1.setLayout(null);
frm1.setSize(300,300);
frm1.setBackground(Color.green);//背景颜色
about.setBounds(30,40,180,150);
about.setForeground(new Color(0,0,0));//label color白色
about.setEditable(false);
yes2.setBounds(240,250,30,20);
frm1.add(about);
frm1.add(yes2);
yes2.addActionListener(new ActLis());
}
static class ActLis implements ActionListener
{
static double memory=0;//yuan lai内存里的数值。
static int an=0;//是否是连续按四则运算键
static boolean bbs=true;//用来判断是否是第一次按四则运算键。
static double vard, answerd=0; //用来保存double型数据的中间值(vard)和最后结果(answerd)
static double memoryd=0;
static boolean mr=false;//用来测试是否连续按MR键。
static short key = -1, prekey = -1; //key用来保存当前进行何种运算,prekey用来保存前次进行何种运算
static double btn3_12;//x^y
static boolean btn3_12_able=false;//x^y
public void actionPerformed(ActionEvent e)
{
Button btn = (Button) e.getSource(); //取得button对象
//设置各个按钮行为
try {
//按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后
for (int i = 0; i <= 9; i++)
{
if (btn == btn1[i] ) {
String s = textAnswer.getText();
if(s.length()==1&&s.charAt(0)=='0') {textAnswer.setText(Integer.toString(i));clikable=true;}else
if(clikable)
{textAnswer.setText(textAnswer.getText() + Integer.toString(i));}
else
{textAnswer.setText(Integer.toString(i));clikable=true;}
}
}
//正否号的操作。
if (btn == btn1[10]) {
boolean isNumber = true;
String s = textAnswer.getText();
for (int i = 0; i < s.length(); i++)
if (! (s.charAt(i) >= '0' && s.charAt(i) <= '9' || s.charAt(i) == '.' || s.charAt(i) == '-'))
{
isNumber = false;
break;
}
if (isNumber == true) {
//如果当前字符串首字母有′-′号,代表现在是个负数,再按下时,则将首符号去掉
if (s.charAt(0) == '-') {
textAnswer.setText("");
for (int i = 1; i < s.length(); i++) {
char a = s.charAt(i);
textAnswer.setText(textAnswer.getText() + a);
}
}
//如果当前字符串第一个字符不是符号,则添加一个符号在首字母处
else textAnswer.setText( '-' + s);
}
memory=Double.parseDouble(textAnswer.getText());
textAnswer.setText(Double.toString(memory));
}
//'.'的操作
if(btn == btn1[11] ){
boolean dian=false;
String s = textAnswer.getText();
for (int i = 0; i < s.length(); i++)
{if (s.charAt(i) == '.' ) dian=true; else ; }
if(dian==false)
textAnswer.setText(textAnswer.getText() + '.');
else ;
clikable=true;
}
//'/'
if(btn == btn4[0])
{
clikable = false;
if(an==0) { answerd = Double.parseDouble(textAnswer.getText()); an=1;
if(bbs) { answerd = Double.parseDouble(textAnswer.getText()); memory=answerd;} else{
answerd = Double.parseDouble(textAnswer.getText());
switch (prekey) {
case 0:
answerd = memory + answerd;textAnswer.setText(Double.toString(answerd)); memory=answerd;
break;
case 1:
answerd = memory - answerd;textAnswer.setText(Double.toString(answerd)); memory=answerd;
break;
case 2:
answerd = memory * answerd;textAnswer.setText(Double.toString(answerd)); memory=answerd;
break;
case 3:
if (Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("除数不能为零");
}
else
answerd = memory / answerd;textAnswer.setText(Double.toString(answerd)); memory=answerd;
break;
default:break;
}
}
} else ;
prekey = key = 3;
bbs=false;
}
//'*'
if(btn == btn4[3])
{
clikable=false;
answerd = Double.parseDouble(textAnswer.getText());
if(bbs) { memory=answerd;} else{
switch (prekey) {
case 0:
answerd = memory + answerd;
break;
case 1:
answerd = memory - answerd;
break;
case 2:
answerd = memory * answerd;
break;
case 3:
if (Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("除数不能为零");
clikable = false;
}
else
answerd = memory / answerd;
break;
default:break;
}
}
textAnswer.setText(Double.toString(answerd));
prekey = key = 2;
bbs=false;
an=1;
memory=answerd;
}
//'-'
if(btn == btn4[6])
{if(an==0) { answerd = Double.parseDouble(textAnswer.getText());
if(bbs) {memory=answerd;} else{
switch (prekey) {
case 0:
answerd = memory + answerd;
break;
case 1:
answerd = memory - answerd;
break;
case 2:
answerd =memory * answerd;
break;
case 3:
if (Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("除数不能为零");
}
else
answerd = memory / answerd;
break;
default:break;
}
}
} else ;
textAnswer.setText(Double.toString(answerd));
bbs=false;
an=1;
prekey = key = 1;
memory=answerd;
}
//'+'
if(btn == btn4[9])
{if(an==0) { answerd = Double.parseDouble(textAnswer.getText());
if(bbs) { memory=answerd;} else{
switch (prekey) {
case 0:
answerd = memory + answerd;
break;
case 1:
answerd = memory - answerd;
break;
case 2:
answerd = memory * answerd;
break;
case 3:
if (Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("除数不能为零");
}
else
answerd = memory / answerd;
break;
default:break;
}
}
} else ;
clikable=false;
textAnswer.setText(Double.toString(answerd));
bbs=false;
an=1;
prekey = key = 0;
memory=answerd;
}
//'='
if (btn == btn4[10] ) {
answerd = Double.parseDouble(textAnswer.getText());
//如果连续按′=′,则进行连续运算
if (prekey == 5) {
if (key == 0) {
answerd = memory + vard;
textAnswer.setText(Double.toString(answerd));
}
if (key == 1) {
answerd = memory - vard;
textAnswer.setText(Double.toString(answerd));
}
if (key == 2) {
answerd = memory * vard;
textAnswer.setText(Double.toString(answerd));
}
if (key == 3) {
if (Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("除数不能为零");
clikable = false;
}
else {
answerd = memory / vard;
textAnswer.setText(Double.toString(answerd));
}
}
}//liang xu an "="
else {
vard = Double.parseDouble(textAnswer.getText());
if (key == 0) {
prekey = -1;
answerd = memory + answerd;memory=answerd;
textAnswer.setText(Double.toString(answerd));
}
if (key == 1) {
prekey = -1;
answerd = memory - answerd;memory=answerd;
textAnswer.setText(Double.toString(answerd));
}
if (key == 2) {
prekey = -1;
answerd = memory * answerd;memory=answerd;
textAnswer.setText(Double.toString(answerd));
}
if (key == 3) {
prekey = -1;
if (Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("除数不能为零");
clikable = false;
}
else {
answerd =memory / answerd; memory=answerd;
textAnswer.setText(Double.toString(answerd));
}
}
}
bbs=true;
clikable=false;
memory=answerd;
prekey = 5;
an=0;
}
//"Bakespace"
if(btn == btn2[0]){
String s = textAnswer.getText();
if(s.length()>0){
textAnswer.setText("");
for (int i = 0; i < s.length() - 1; i++) {
char a = s.charAt(i);
textAnswer.setText(textAnswer.getText() + a);
}
}
else{
textAnswer.setText("0");
}
}
//"CE"
if(btn == btn2[1]){
textAnswer.setText("0");
clikable=true;
}
//"C"
if(btn == btn2[2]){
vard = answerd = 0;
textAnswer.setText("0");
memory=0;
clikable=true;
an=0;
bbs=true;
}
if(btn==btn4[1]){//mod
}
if(btn==btn4[2]){//and
}
if(btn==btn4[4]){//or
}
if(btn==btn4[5]){//Xor D:\docs\api\java\math\BigInteger.html
/* BigInteger btn4_5=new BigInteger(textAnswer.getText());
BigInteger jj=new BigInteger(textAnswer.getText());
btn4_5=jj.xor(btn4_5);
//int i=BigInteger.bitCount(btn4_5,btn4_5);
String s=long.toString(btn4_5);
textAnswer.setText(s); */
}
if(btn==btn4[7]){//lsh
}
if(btn==btn4[8]){//net
}
if(btn==btn4[11]){//Int
String s=textAnswer.getText();
textAnswer.setText("");
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='.') break;
textAnswer.setText(textAnswer.getText()+s.charAt(i));
}
}
if(btn==btn3[0]){//new Button("toDegrees"));
double btn3_17=Double.parseDouble(textAnswer.getText());
btn3_17=Math.toDegrees(btn3_17);
textAnswer.setText(Double.toString(btn3_17));
}
if(btn==btn3[1]){//new Button("toRad"));
double btn3_17=Double.parseDouble(textAnswer.getText());
btn3_17=Math.toRadians(btn3_17);
textAnswer.setText(Double.toString(btn3_17));
}
if(btn==btn3[2]){//new Button("arcos"));
double btn3_17=Double.parseDouble(textAnswer.getText());
btn3_17=Math.acos(btn3_17);
textAnswer.setText(Double.toString(btn3_17));
}
if(btn==btn3[3]){//new Button("arcsin"));
double btn3_17=Double.parseDouble(textAnswer.getText());
btn3_17=Math.asin(btn3_17);
textAnswer.setText(Double.toString(btn3_17));
}
if(btn==btn3[4]){//new Button("MC"));
mr=false;memoryd=0;Mr.setText("");
}
if(btn==btn3[5]){//new Button("cosh"));
double btn3_17=Double.parseDouble(textAnswer.getText());
btn3_17=Math.cosh(btn3_17);
textAnswer.setText(Double.toString(btn3_17));
}
if(btn==btn3[6]){//new Button("sqrt"));
double btn3_17=Double.parseDouble(textAnswer.getText());
btn3_17=Math.sqrt(btn3_17);
textAnswer.setText(Double.toString(btn3_17));
}
if(btn==btn3[7]){//new Button("Exp"));
double btn3_17=Double.parseDouble(textAnswer.getText());
btn3_17=Math.exp(btn3_17);
textAnswer.setText(Double.toString(btn3_17));
}
if(btn==btn3[8]){//new Button("ln"));
double btn3_17=Double.parseDouble(textAnswer.getText());
btn3_17=Math.log(btn3_17);
textAnswer.setText(Double.toString(btn3_17));
}
if(btn==btn3[9]){//new Button("MR"));
if(mr==false) {memoryd=0;Mr.setText("");}
if (memoryd != 0)
textAnswer.setText(Double.toString(memoryd));
mr=false;
clikable=false;
}
if(btn!=btn3[9]) mr=true;//
if(btn==btn3[10]){//new Button("sum"));
textAnswer.setText(Double.toString(memoryd));
}
if(btn==btn3[11]){//new Button("sin"));
double btn3_17=Double.parseDouble(textAnswer.getText());
btn3_17=Math.sin(btn3_17);
textAnswer.setText(Double.toString(btn3_17));
}
if(btn==btn3[12]){//new Button("x^y"));
double btn3_17=Double.parseDouble(textAnswer.getText());
if(btn3_12_able){
btn3_17=Math.pow(btn3_12,btn3_17);
textAnswer.setText(Double.toString(btn3_17));
btn3_12_able=false;
}
else { btn3_12=Double.parseDouble(textAnswer.getText());btn3_12_able=true;}
}
if(btn==btn3[13]){//new Button("log"));
double btn3_17=Double.parseDouble(textAnswer.getText());
btn3_17=Math.log10(btn3_17);
textAnswer.setText(Double.toString(btn3_17));
}
if(btn==btn3[14]){//new Button("Ms"));
}
if(btn==btn3[15]){//new Button("sinh"));
double btn3_17=Double.parseDouble(textAnswer.getText());
btn3_17=Math.sinh(btn3_17);
textAnswer.setText(Double.toString(btn3_17));
}
if(btn==btn3[16]){//new Button("cos"));
double btn3_17=Double.parseDouble(textAnswer.getText());
btn3_17=Math.cos(btn3_17);
textAnswer.setText(Double.toString(btn3_17));
}
if(btn==btn3[17]){//new Button("x^3"));
double btn3_17=Double.parseDouble(textAnswer.getText());
btn3_17=Math.pow(btn3_17,3.0);
textAnswer.setText(Double.toString(btn3_17));
}
if(btn==btn3[18]){//new Button("n!"));
long jiecheng=Long.parseLong(textAnswer.getText());
double jie=1;
for(int i=1;i<=jiecheng;i++){
jie=jie*i;
}
textAnswer.setText(Double.toString(jie));
clikable=false;
}
if(btn==btn3[19]){//new Button("M+"));
Mr.setText("M"); mr=true;
memoryd = memoryd + Double.parseDouble(textAnswer.getText());
clikable=false;
}
if(btn==btn3[20]){//new Button("Dat"));
}
if(btn==btn3[21]){//new Button("tan"));
double btn3_21=Double.parseDouble(textAnswer.getText());
btn3_21=Math.tan(btn3_21);
textAnswer.setText(Double.toString(btn3_21));
}
if(btn==btn3[22]){//new Button("x^2"));
double btn3_22=Double.parseDouble(textAnswer.getText());
textAnswer.setText(Double.toString(btn3_22*btn3_22));
}
if(btn==btn3[23]){//new Button("1/x"));
double btn3_21=Double.parseDouble(textAnswer.getText());
btn3_21=1.0/btn3_21;
textAnswer.setText(Double.toString(btn3_21));
}
if(btn==btn3[24]){// Button("pi"));
textAnswer.setText("3.1415926535897932384626433832795"); clikable=false;
}
//如果按键不是四则运算键,则an=0;
if(btn!=btn4[0] && btn!=btn4[3] && btn!=btn4[6] && btn!=btn4[9])
{
an=0;
}
//
if(btn==yes1){//按下帮助对话框中的确定按钮
help.dispose();
}
if(btn==yes2){//按下about calculator对话框中的确定按钮
frm1.dispose();
}
//如果按下的不是数字键或'.''+/-'clikable=false
boolean testclikable=false;
for(int i=0;i<12;i++){
if(btn==btn1[i]) testclikable=true;
}
if(!testclikable){
clikable=false;
//如按下的不是数字键,把".0"给去掉
String s = textAnswer.getText();
int a=s.length();
if(a>=2)
if(s.charAt(a-1)=='0' && s.charAt(a-2)=='.'){
textAnswer.setText("");
for(int j=0;j<s.length()-2;j++){
textAnswer.setText(textAnswer.getText()+s.charAt(j));
}
}
if(s.length()==0){//
textAnswer.setText("0");
}
}
}
//输入中如果有操作非法,
finally{}
}
}
static class menu implements ActionListener
{
static String copy;//用来复制
public void actionPerformed(ActionEvent e)
{
MenuItem mi=(MenuItem) e.getSource();//取得menu对象
if(mi==mi1)//copy
{copy = textAnswer.getText();clikable=false;}
if(mi==mi2)//Paste
{textAnswer.setText(copy);clikable=false;}
if(mi==mi3)
System.exit(0);
if(mi==mi4)
{
ans8_0 calcu=new ans8_0();
calcu.Calculator1();
frm.dispose();
}
if(mi==mi5)
{
frm.setVisible(true);
}
if(mi==mi6){//科学分组
}
if(mi==mi7)//help???
{
help.setLocation(28,30);
help.setVisible(true);
}
if(mi==mi8){//about calculator
frm1.setLocation(28,30);
frm1.setVisible(true);
}
}
}
//ItemEvent
static class check implements ItemListener
{
static int perkey=10;//前一个进制
public void itemStateChanged(ItemEvent e)
{
if(ckb1.getState()==true){//new Checkbox("Inv");
}
if(ckb2.getState()==true){//new Checkbox("Hyp");
}
if(ckb3.getState()==true){//ckb3=new Checkbox("十六进制");
switch(perkey){
case 10:{//10->16
Double d=Double.parseDouble(textAnswer.getText());
String s=Decimal.toHexad(d);
textAnswer.setText(s);
break;
}
case 2:{//2>16
try{
String s=textAnswer.getText();
s=Binary.toHexad(s);
textAnswer.setText(s);
break;
}
catch(NoBinaryException i){
textAnswer.setText("不是二进制!!!");
}
}
case 8:{
String s=textAnswer.getText();
s=Bajinzhi.toHexad(s);
textAnswer.setText(s);
break;
}
default:
}
perkey=16;
}
if(ckb4.getState()==true){//ckb4=new Checkbox("十进制");
switch(perkey){
case 16:{//16->10
try{
String s=textAnswer.getText();
Double d=Hexad.toDecimal(s);
textAnswer.setText(Double.toString(d));
break;
}
catch(NotHexadException i){
textAnswer.setText("不是十六进制!!!");
}
}
case 8:{
String s=textAnswer.getText();
Double d=Bajinzhi.toDecimal(s);
textAnswer.setText(Double.toString(d));
break;
}
case 2:{
try{
String s=textAnswer.getText();
Double d=Binary.toDecimal(s);
textAnswer.setText(Double.toString(d));
break;
}
catch(NoBinaryException i){
textAnswer.setText("不是二进制!!!");
}
}
default:
}
perkey=10;
}
if(ckb5.getState()==true){//ckb5=new Checkbox("八进制");
switch(perkey){
case 10:{//10->8
Double d=Double.parseDouble(textAnswer.getText());
String s=Decimal.toBajinzhi(d);
textAnswer.setText(s);
break;
}
case 16:{
try{
String s=textAnswer.getText();
s=Hexad.toBajinzhi(s);
textAnswer.setText(s);
break;
}
catch(NotHexadException i){
textAnswer.setText("不是十六进制!!!");
}
}
case 2:{
try{
String s=textAnswer.getText();
s=Binary.toBajinzhi(s);
textAnswer.setText(s);
break;
}
catch(NoBinaryException i){
textAnswer.setText("不是二进制!!!");
}
}
default:
}
perkey=8;
}
if(ckb6.getState()==true){//static Checkbox ckb6=new Checkbox("二进制");
switch(perkey){
case 16:{//16->2
try{
String s=textAnswer.getText();
s=Hexad.toBinary(s);
textAnswer.setText(s);
break;
}
catch(NotHexadException i){
textAnswer.setText("不是十六进制!!!");
}
}
case 10:{
Double d=Double.parseDouble(textAnswer.getText());
String s=Decimal.toBinary(d);
textAnswer.setText(s);
break;
}
case 8:{
try{
String s=textAnswer.getText();
s=Bajinzhi.toBinary(s);
textAnswer.setText(s);
break;
}
catch(NotBajinzhiException b){
textAnswer.setText("不是八进制!!!");
}
}
default:
}
perkey=2;
}
if(ckb7.getState()==true){//("四字")
}
if(ckb8.getState()==true){//("双字");
}
if(ckb9.getState()==true){//("单字");
}
if(ckb10.getState()==true){//("字节");
}
}
}
static class WinLis extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
frm.dispose();
}
}
}
import java.awt.*;
import java.lang.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.text.DecimalFormat;
class ans8_0 implements ActionListener
{ //导入动作监听接口
//设计面板中的单位
JFrame frame;
JTextField textAnswer;
JPanel panel, panel1, panel2, panel3;
JMenuBar mainMenu;
JTextField textMemory;
JLabel labelMemSpace; //labelMemSpace单纯做摆设,控制面板的形状
JButton buttonBk, buttonCe, buttonC;
JButton button[];
JButton buttonMC, buttonMR, buttonMS, buttonMAdd;
JButton buttonDot, buttonAddAndSub, buttonAdd, buttonSub, buttonMul,
buttonDiv, buttonMod;
JButton buttonSqrt, buttonDao, buttonEqual;
JMenu editMenu, viewMenu, helpMenu;
JMenuItem copyItem, pasteItem, tItem, sItem, numberGroup, topHelp, aboutCal;
DecimalFormat df; //设置数据输出精度
boolean clickable; //控制当前能否按键
double memoryd; //使用内存中存储的数字
int memoryi;
double vard, answerd; //用来保存double型数据的中间值(vard)和最后结果(answerd)
short key = -1, prekey = -1; //key用来保存当前进行何种运算,prekey用来保存前次进行何种运算
String copy; //做复制用
JTextArea help; //帮助
JScrollPane scrollHelp;
//构造函数
public void Calculator1() {
clickable = true;
answerd = 0;
frame = new JFrame("计算器");
df = new DecimalFormat("0.##############"); //设置数据输出精度(对于double型值)
textAnswer = new JTextField(15);
textAnswer.setText("");
textAnswer.setEditable(false);
textAnswer.setBackground(new Color(255, 255, 255));
panel = new JPanel();
frame.getContentPane().add(panel);
panel1 = new JPanel();
panel2 = new JPanel();
panel.setLayout(new BorderLayout());
//设计整个面板
mainMenu = new JMenuBar();
editMenu = new JMenu("编辑(E)");
viewMenu = new JMenu("查看(V)");
helpMenu = new JMenu("帮助(H)");
copyItem = new JMenuItem(" 复制(C) Ctrl+C");
copyItem.addActionListener(this);
pasteItem = new JMenuItem(" 粘贴(V) Ctrl+V");
pasteItem.addActionListener(this);
editMenu.add(copyItem);
editMenu.add(pasteItem);
tItem = new JMenuItem("●标准型(T)");
tItem.addActionListener(this);
sItem = new JMenuItem(" 科学型(S)");
sItem.addActionListener(this);
numberGroup = new JMenuItem(" 数字分组(I)");
numberGroup.addActionListener(this);
viewMenu.add(tItem);
viewMenu.add(sItem);
viewMenu.add(numberGroup);
topHelp = new JMenuItem(" 帮助主题(H)");
topHelp.addActionListener(this);
help = new JTextArea(5, 20);
scrollHelp = new JScrollPane(help);
help.setEditable(false);
help.append("执行简单计算\n");
help.append("1. 键入计算的第一个数字。\n");
help.append("2. 单击“+”执行加、“-”执行减、“*”执行乘或“/”执行除。\n");
help.append("3. 键入计算的下一个数字。\n");
help.append("4. 输入所有剩余的运算符和数字。\n");
help.append("5. 单击“=”。\n");
aboutCal = new JMenuItem(" 关于计算器(A)");
aboutCal.addActionListener(this);
helpMenu.add(topHelp);
helpMenu.add(aboutCal);
mainMenu.add(editMenu);
mainMenu.add(viewMenu);
mainMenu.add(helpMenu);
panel.add(mainMenu, BorderLayout.NORTH);
panel.add(textAnswer, BorderLayout.CENTER);
panel.add(panel1, BorderLayout.SOUTH);
panel1.setLayout(new BorderLayout());
textMemory = new JTextField(3);
textMemory.setEditable(false);
textMemory.setBackground(new Color(217, 217, 217));
labelMemSpace = new JLabel(" ");
buttonBk = new JButton("Backspace");
buttonBk.setForeground(new Color(255, 0, 0));
buttonCe = new JButton("CE");
buttonCe.setForeground(new Color(255, 0, 0));
buttonC = new JButton("C");
buttonC.setForeground(new Color(255, 0, 0));
buttonBk.addActionListener(this);
buttonCe.addActionListener(this);
buttonC.addActionListener(this);
panel1.add(panel2, BorderLayout.NORTH);
panel2.setLayout(new FlowLayout(FlowLayout.RIGHT));
panel2.add(textMemory);
panel2.add(labelMemSpace);
panel2.add(buttonBk);
panel2.add(buttonCe);
panel2.add(buttonC);
panel3 = new JPanel();
panel1.add(panel3, BorderLayout.CENTER);
button = new JButton[10]; //define button
for (int i = 0; i < button.length; i++) {
button[i] = new JButton(Integer.toString(i));
button[i].setForeground(new Color(0, 0, 255));
}
buttonMC = new JButton("MC");
buttonMC.setForeground(new Color(255, 0, 0));
buttonMR = new JButton("MR");
buttonMR.setForeground(new Color(255, 0, 0));
buttonMS = new JButton("MS");
buttonMS.setForeground(new Color(255, 0, 0));
buttonMAdd = new JButton("M+");
buttonMAdd.setForeground(new Color(255, 0, 0));
buttonDot = new JButton(".");
buttonDot.setForeground(new Color(0, 0, 255));
buttonAddAndSub = new JButton("+/-");
buttonAddAndSub.setForeground(new Color(0, 0, 255));
buttonAdd = new JButton("+");
buttonAdd.setForeground(new Color(255, 0, 0));
buttonSub = new JButton("-");
buttonSub.setForeground(new Color(255, 0, 0));
buttonMul = new JButton("*");
buttonMul.setForeground(new Color(255, 0, 0));
buttonDiv = new JButton("/");
buttonDiv.setForeground(new Color(255, 0, 0));
buttonMod = new JButton("%");
buttonMod.setForeground(new Color(0, 0, 255));
buttonSqrt = new JButton("sqrt");
buttonSqrt.setForeground(new Color(0, 0, 255));
buttonDao = new JButton("1/x");
buttonDao.setForeground(new Color(0, 0, 255));
buttonEqual = new JButton("=");
buttonEqual.setForeground(new Color(255, 0, 0));
//将所有行为与监听绑定
panel3.setLayout(new GridLayout(4, 6));
panel3.add(buttonMC);
buttonMC.addActionListener(this);
panel3.add(button[7]);
button[7].addActionListener(this);
panel3.add(button[8]);
button[8].addActionListener(this);
panel3.add(button[9]);
button[9].addActionListener(this);
panel3.add(buttonDiv);
buttonDiv.addActionListener(this);
panel3.add(buttonSqrt);
buttonSqrt.addActionListener(this);
panel3.add(buttonMR);
buttonMR.addActionListener(this);
panel3.add(button[4]);
button[4].addActionListener(this);
panel3.add(button[5]);
button[5].addActionListener(this);
panel3.add(button[6]);
button[6].addActionListener(this);
panel3.add(buttonMul);
buttonMul.addActionListener(this);
panel3.add(buttonMod);
buttonMod.addActionListener(this);
panel3.add(buttonMS);
buttonMS.addActionListener(this);
panel3.add(button[1]);
button[1].addActionListener(this);
panel3.add(button[2]);
button[2].addActionListener(this);
panel3.add(button[3]);
button[3].addActionListener(this);
panel3.add(buttonSub);
buttonSub.addActionListener(this);
panel3.add(buttonDao);
buttonDao.addActionListener(this);
panel3.add(buttonMAdd);
buttonMAdd.addActionListener(this);
panel3.add(button[0]);
button[0].addActionListener(this);
panel3.add(buttonAddAndSub);
buttonAddAndSub.addActionListener(this);
panel3.add(buttonDot);
buttonDot.addActionListener(this);
panel3.add(buttonAdd);
buttonAdd.addActionListener(this);
panel3.add(buttonEqual);
buttonEqual.addActionListener(this);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.pack();
frame.show();
}
//设置各个按钮行为
public void actionPerformed(ActionEvent event) {
boolean sign = false; //判断是否是double型数参与运算,是为true,不是为false
Object temp = event.getSource();
try {
//如果按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后
for (int i = 0; i <= 9; i++)
if (temp == button[i] && clickable == true)
textAnswer.setText(textAnswer.getText() + Integer.toString(i));
if (temp == buttonDot && clickable == true)
{
boolean isDot = false;
if (textAnswer.getText().length() == 0)
isDot = true;
for (int i = 0; i < textAnswer.getText().length(); i++)
if ('.'== textAnswer.getText().charAt(i)) {
isDot = true;
break;
}
if (isDot == false)
textAnswer.setText(textAnswer.getText() + '.');
}
if ( (temp == buttonAdd || temp == buttonSub || temp == buttonMul ||
temp == buttonDiv) && clickable == true) {
//′+′操作
if (temp == buttonAdd) {
switch (prekey) {
case 0:
answerd += Double.parseDouble(textAnswer.getText());
break;
case 1:
answerd -= Double.parseDouble(textAnswer.getText());
break;
case 2:
answerd *= Double.parseDouble(textAnswer.getText());
break;
case 3:
if (Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("除数不能为零");
clickable = false;
}
else
answerd /= Double.parseDouble(textAnswer.getText());
break;
default:
answerd = Double.parseDouble(textAnswer.getText());
}
textAnswer.setText("");
prekey = key = 0;
}
//′-′操作
if (temp == buttonSub) {
switch (prekey) {
case 0:
answerd += Double.parseDouble(textAnswer.getText());
break;
case 1:
answerd -= Double.parseDouble(textAnswer.getText());
break;
case 2:
answerd *= Double.parseDouble(textAnswer.getText());
break;
case 3:
if (Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("除数不能为零");
clickable = false;
}
else
answerd /= Double.parseDouble(textAnswer.getText());
break;
default:
answerd = Double.parseDouble(textAnswer.getText());
}
textAnswer.setText("");
prekey = key = 1;
}
//′*′操作
if (temp == buttonMul) {
switch (prekey) {
case 0:
answerd += Double.parseDouble(textAnswer.getText());
break;
case 1:
answerd -= Double.parseDouble(textAnswer.getText());
break;
case 2:
answerd *= Double.parseDouble(textAnswer.getText());
break;
case 3:
if (Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("除数不能为零");
clickable = false;
}
else
answerd /= Double.parseDouble(textAnswer.getText());
break;
default:
answerd = Double.parseDouble(textAnswer.getText());
}
textAnswer.setText("");
prekey = key = 2;
}
//′/′操作
if (temp == buttonDiv) {
switch (prekey) {
case 0:
answerd += Double.parseDouble(textAnswer.getText());
break;
case 1:
answerd -= Double.parseDouble(textAnswer.getText());
break;
case 2:
answerd *= Double.parseDouble(textAnswer.getText());
break;
case 3:
if (Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("除数不能为零");
clickable = false;
}
else
answerd /= Double.parseDouble(textAnswer.getText());
break;
default:
answerd = Double.parseDouble(textAnswer.getText());
}
textAnswer.setText("");
prekey = key = 3;
}
}
//′=′操作
if (temp == buttonEqual && clickable == true) {
//如果连续按′=′,则进行连续运算
if (prekey == 5) {
if (key == 0) {
answerd += vard;
textAnswer.setText(df.format(answerd));
}
if (key == 1) {
answerd -= vard;
textAnswer.setText(df.format(answerd));
}
if (key == 2) {
answerd *= vard;
textAnswer.setText(df.format(answerd));
}
if (key == 3) {
if (Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("除数不能为零");
clickable = false;
}
else {
answerd /= vard;
textAnswer.setText(df.format(answerd));
}
}
}
else {
vard = Double.parseDouble(textAnswer.getText());
if (key == 0) {
prekey = -1;
answerd += Double.parseDouble(textAnswer.getText());
textAnswer.setText(df.format(answerd));
}
if (key == 1) {
prekey = -1;
answerd -= Double.parseDouble(textAnswer.getText());
textAnswer.setText(df.format(answerd));
}
if (key == 2) {
prekey = -1;
answerd *= Double.parseDouble(textAnswer.getText());
textAnswer.setText(df.format(answerd));
}
if (key == 3) {
prekey = -1;
if (Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("除数不能为零");
clickable = false;
}
else {
answerd /= Double.parseDouble(textAnswer.getText());
textAnswer.setText(df.format(answerd));
}
}
}
prekey = 5;
}
//′%′操作,对第二个操作数除以100
if (temp == buttonMod && clickable == true) {
if (answerd == 0) {
String s = textAnswer.getText();
textAnswer.setText(s);
}
else {
boolean isDot = false;
for (int i = 0; i < textAnswer.getText().length(); i++)
if ('.' == textAnswer.getText().charAt(i)) {
isDot = true;
break;
}
//如果是double数,除100
if (isDot == true) {
double dtemp = Double.parseDouble(textAnswer.getText());
dtemp = dtemp / 100.0;
textAnswer.setText(Double.toString(dtemp));
}
else {
//如果是int数但能被100整除,则去掉末尾两个零
if (Integer.parseInt(textAnswer.getText()) % 100 == 0) {
int itemp = Integer.parseInt(textAnswer.getText());
itemp /= 100;
textAnswer.setText(Integer.toString(itemp));
}
//如果是int数,但不能被100整除,则按double数处理
else {
double dtemp = Double.parseDouble(textAnswer.getText());
dtemp = dtemp / 100.0;
textAnswer.setText(Double.toString(dtemp));
}
}
}
}
//开根号运算
if (temp == buttonSqrt && clickable == true) {
String s = textAnswer.getText();
if (s.charAt(0) == '-') {
textAnswer.setText("负数不能开根号");
clickable = false;
}
else
textAnswer.setText(Double.toString(java.lang.Math.sqrt(Double.parseDouble(textAnswer.getText()))));
}
//倒数运算
if (temp == buttonDao && clickable == true) {
if (textAnswer.getText().charAt(0) == '0' && textAnswer.getText().length() == 1) {
textAnswer.setText("零不能求倒数");
clickable = false;
}
else {
boolean isDec = true;
int i, j, k;
String s = Double.toString(1 / Double.parseDouble(textAnswer.getText()));
for (i = 0; i < s.length(); i++)
if (s.charAt(i) == '.')
break;
for (j = i + 1; j < s.length(); j++)
if (s.charAt(j) != '0') {
isDec = false;
break;
}
if (isDec == true) {
String stemp = "";
for (k = 0; k < i; k++)
stemp += s.charAt(k);
textAnswer.setText(stemp);
}
else textAnswer.setText(s);
}
}
//按下′+/-′按钮时处理
if (temp == buttonAddAndSub && clickable == true) {
boolean isNumber = true;
String s = textAnswer.getText();
for (int i = 0; i < s.length(); i++)
if (! (s.charAt(i) >= '0' && s.charAt(i) <= '9' || s.charAt(i) == '.' || s.charAt(i) == '-'))
{
isNumber = false;
break;
}
if (isNumber == true) {
//如果当前字符串首字母有′-′号,代表现在是个负数,再按下时,则将首符号去掉
if (s.charAt(0) == '-') {
textAnswer.setText("");
for (int i = 1; i < s.length(); i++) {
char a = s.charAt(i);
textAnswer.setText(textAnswer.getText() + a);
}
}
//如果当前字符串第一个字符不是符号,则添加一个符号在首字母处
else textAnswer.setText( '-' + s);
}
}
//计算器有关内存操作
//′MC′的操作,将内存清0 //
if (temp == buttonMC && clickable == true) {
memoryd = memoryi = 0;
textMemory.setText("");
}
//′MS′的操作,将当前文本框内容保存入内存,显示′M′
if (temp == buttonMS && clickable == true) {
boolean isDot = false;
textMemory.setText(" M");
for (int i = 0; i < textAnswer.getText().length(); i++)
if ('.' == textAnswer.getText().charAt(i)) {
isDot = true;
break;
}
//如果是double,则存入memoryd(double存储器)
if (isDot == true) {
memoryd = Double.parseDouble(textAnswer.getText());
memoryi = 0; //保证存储器中存放最新的值
}
//如果是int,则存入memoryi(int存储器)
else {
memoryi = Integer.parseInt(textAnswer.getText());
memoryd = 0; //保证存储器中存放最新的值
}
}
//′MR′的操作,将存储器中的信息输出
if (temp == buttonMR && clickable == true) {
if (memoryd != 0)
textAnswer.setText(Double.toString(memoryd));
if (memoryi != 0)
textAnswer.setText(Integer.toString(memoryi));
}
//′M+′的功能,将当前文本框里的数据和存储器中数据相加后,再存入存储器
if (temp == buttonMAdd && clickable == true) {
boolean isDot = false;
for (int i = 0; i < textAnswer.getText().length(); i++)
if ('.'== textAnswer.getText().charAt(i)) {
isDot = true;
break;
}
if (memoryi!= 0) { //存储中是一个int型数
if (isDot == false) //被加数是一个int型数
memoryi += Integer.parseInt(textAnswer.getText());
else { //被加数是一个double型数,则将int存储器中数传入double存储器与当前数相加,int存储器清零
memoryd = memoryi + Double.parseDouble(textAnswer.getText());
memoryi = 0;
}
}
else
memoryd+=Double.parseDouble(textAnswer.getText());
}
//按下′Backspace′键,利用循环将当前字符串中的最后一个字母删除
if (temp == buttonBk && clickable == true) {
String s = textAnswer.getText();
textAnswer.setText("");
for (int i = 0; i < s.length() - 1; i++) {
char a = s.charAt(i);
textAnswer.setText(textAnswer.getText() + a);
}
}
//按下′CE′按钮,将当前文本框内数据清除
if (temp == buttonCe) {
textAnswer.setText("");
clickable = true;
}
//按下′C′按钮,文本框内数据清除,同时var,answer清0
if (temp == buttonC) {
vard = answerd = 0;
textAnswer.setText("");
clickable = true;
}
//按下′复制′菜单栏
if (temp == copyItem) {
copy = textAnswer.getText();
}
//按下′粘贴′菜单栏
if (temp == pasteItem) {
textAnswer.setText(copy);
}
if (temp == sItem) {
ans8 calcu=new ans8();
calcu.ning();
frame.dispose();
}
//按下′帮助主题′菜单栏
if (temp == topHelp) {
JOptionPane.showMessageDialog(panel, scrollHelp);
}
//按下′数字分组′菜单栏
if (temp == numberGroup) {
if (numberGroup.getText().compareTo(" 数字分组(I)") == 0)
numberGroup.setText("√数字分组(I)");
else
numberGroup.setText(" 数字分组(I)");
}
//按下′关于′菜单栏
if (temp == aboutCal) {
JOptionPane.showMessageDialog(panel, "Are you OK??");
}
}
//输入中如果有操作非法,比如按下两次′+′,捕获异常
catch (Exception e) {
textAnswer.setText("操作非法");
clickable = false;
}
}
}