//frame版程序源代码如下,疏漏之处,望批评指正。
//数字分组没有编写,科学型计算器没有编写,其他已经完善。
import java.awt.*;
import java.lang.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.text.decimalformat;
public class calculator
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 calculator() {
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];
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) {
joptionpane.showmessagedialog(panel, "当前是标准型计算器,\n科学型计算器有待更新。");
}
//按下帮助主题菜单栏
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, "计算器1.00版\n开发者:楼竞");
}
}
//输入中如果有操作非法,比如按下两次+,捕获异常
catch (exception e) {
textanswer.settext("操作非法");
clickable = false;
}
}
//主函数
public static void main(string args[]) {
new calculator();
}
}
Java编写的计算器程序及源代码-JSP教程,Java技巧及代码
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » Java编写的计算器程序及源代码-JSP教程,Java技巧及代码
相关推荐
-      J2ME中的时间处理方法
-      J2ME播放声音流程简介
-      J2ME开发之手机键盘使用注意问题
-      J2ME 记录管理存储
-      MVC模式在j2me项目中的应用(二)
-      MVC模式在j2me项目中的应用(一)
-      J2ME中使用记录存储系统(RMS)存储信息
-      J2ME与MIDP开发(1)
