java计算器代码
计算器不单单是练习如何布局,更重要的是如何实现复杂的运算逻辑。
新手编写计算器,无疑会用到大量的 if-else。
而熟练的开发人员知道如何避开这点。
下面是代码。
[java] view plaincopyprint?import javax.swing.*;import javax.swing.border.Border;import java.awt.*;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.math.BigDecimal;import java.math.RoundingMode;import java.util.HashMap;/*** 我的计算器。
MyCalculator 继承于 JFrame,是计算器的界面*/public class MyCalculator extends JFrame {private Border border = BorderFactory.createEmptyBorder(5, 5, 5, 5);private JTextField textbox = new JTextField("0");private CalculatorCore core = new CalculatorCore();private ActionListener listener = new ActionListener() {public void actionPerformed(ActionEvent e) {JButton b = (JButton) e.getSource();String label = b.getText();String result = core.process(label);textbox.setText(result);}};public MyCalculator(String title) throws HeadlessException {super(title); // 调用父类构造方法setupFrame(); // 调整窗体属性setupControls(); // 创建控件}private void setupControls() {setupDisplayPanel(); // 创建文本面板setupButtonsPanel(); // 创建按钮面板}// 创建按钮面板并添加按钮private void setupButtonsPanel() {JPanel panel = new JPanel();panel.setBorder(border);panel.setLayout(new GridLayout(4, 5, 3, 3));createButtons(panel, new String[]{"7", "8", "9", "+", "C","4", "5", "6", "-", "CE","1", "2", "3", "*", "", // 空字符串表示这个位置没有按钮 "0", ".", "=", "/", ""});this.add(panel, BorderLayout.CENTER);}/*** 在指定的面板上创建按钮** @param panel 要创建按钮的面板* @param labels 按钮文字*/private void createButtons(JPanel panel, String[] labels) {for (String label : labels) {// 如果 label 为空,则表示创建一个空面板。
否则创建一个按钮。
if (label.equals("")) {panel.add(new JPanel());} else {JButton b = new JButton(label);b.addActionListener(listener); // 为按钮添加侦听器panel.add(b);}}}// 设置显示面板,用一个文本框来作为计算器的显示部分。
private void setupDisplayPanel() {JPanel panel = new JPanel();panel.setLayout(new BorderLayout());panel.setBorder(border);setupTextbox();panel.add(textbox, BorderLayout.CENTER);this.add(panel, BorderLayout.NORTH);}// 调整文本框private void setupTextbox() {textbox.setHorizontalAlignment(JTextField.RIGHT); // 文本右对齐textbox.setEditable(false); // 文本框只读textbox.setBackground(Color.white); // 文本框背景色为白色}// 调整窗体private void setupFrame() {this.setDefaultCloseOperation(EXIT_ON_CLOSE); // 当窗体关闭时程序结束 this.setLocation(100, 50); // 设置窗体显示在桌面上的位置this.setSize(300, 200); // 设置窗体大小this.setResizable(false); // 窗体大小固定}// 程序入口public static void main(String[] args) throws Exception {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); MyCalculator frame = new MyCalculator("我的计算器");frame.setVisible(true); // 在桌面上显示窗体}}/*** 计算器核心逻辑。
这个逻辑只能处理 1~2 个数的运算。
*/class CalculatorCore {private String displayText = "0"; // 要显示的文本boolean reset = true;private BigDecimal number1, number2;private String operator;private HashMap<String, Operator> operators = new HashMap<String, Operator>();private HashMap<String, Processor> processors = new HashMap<String, Processor>();CalculatorCore() {setupOperators();setupProcessors();}// 为每种命令添加处理方式private void setupProcessors() {processors.put("[0-9]", new Processor() {public void calculate(String command) {numberClicked(command);}});processors.put("//.", new Processor() {public void calculate(String command) {dotClicked();}});processors.put("=", new Processor() {public void calculate(String command) {equalsClicked();}});processors.put("[+//-*/]", new Processor() {public void calculate(String command) {operatorClicked(command);}});processors.put("C", new Processor() {public void calculate(String command) {clearClicked();}});processors.put("CE", new Processor() {public void calculate(String command) {clearErrorClicked();}});}// 为每种 operator 添加处理方式private void setupOperators() {operators.put("+", new Operator() {public BigDecimal process(BigDecimal number1, BigDecimal number2) { return number1.add(number2);}});operators.put("-", new Operator() {public BigDecimal process(BigDecimal number1, BigDecimal number2) { return number1.subtract(number2);}});operators.put("*", new Operator() {public BigDecimal process(BigDecimal number1, BigDecimal number2) { return number1.multiply(number2);}});operators.put("/", new Operator() {public BigDecimal process(BigDecimal number1, BigDecimal number2) { return number1.divide(number2, 30, RoundingMode.HALF_UP);}});}// 根据命令处理。
计算器Java编程完全代码
计算器Java编程代码1、界面截图1、程序代码import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Counter implements ActionListener {// 改进小数问题private boolean append = false;JButton[] jb = new JButton[20];JTextField jtf = new JTextField(19);String[] st = { "Backs", "CE", "C", "+", " 7 ", " 8 ", " 9", "-"," 4 ", " 5 ", " 6", "*", " 1 ", " 2 ", " 3", "/"," . ", "+/-", " 0", "=", };String num1 = "0";String operator = "+";public Counter() {JFrame jf = new JFrame("计算器");// 界面设置GridLayout gl = new GridLayout(6, 1);jf.setLayout(gl);JPanel jp0 = new JPanel();jp0.add(jtf);jf.add(jp0);JPanel jp1 = new JPanel();for (int i = 0; i < 4; i++) {jb[i] = new JButton(st[i]);jp1.add(jb[i]);}jf.add(jp1);JPanel jp2 = new JPanel();for (int i = 4; i < 8; i++) {jb[i] = new JButton(st[i]);jp2.add(jb[i]);}jf.add(jp2);JPanel jp3 = new JPanel();for (int i = 8; i < 12; i++) {jb[i] = new JButton(st[i]);jp3.add(jb[i]);}jf.add(jp3);JPanel jp4 = new JPanel();for (int i = 12; i < 16; i++) { jb[i] = new JButton(st[i]);jp4.add(jb[i]);}jf.add(jp4);JPanel jp5 = new JPanel();for (int i = 16; i < 20; i++) { jb[i] = new JButton(st[i]);jp5.add(jb[i]);}jf.add(jp5);jtf.setEditable(false);// 文本框不可编辑jf.setResizable(false);// 窗口不可编辑jf.pack();// 自动调整窗口的大小// jf.setSize(240, 220);jf.setLocation(450, 300);jf.setVisible(true);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);for (int i = 0; i < 20; i++) {// 注册监听jb[i].addActionListener(this);}}public void actionPerformed(ActionEvent ae) {String s = ae.getActionCommand();if (s.trim().matches("^\\d$")) {// 判断是输入的是否是数字if (append) {// 追加数字String ss = jtf.getText().trim();jtf.setText(ss + s.trim());} else {// 替换文本框原来的数字jtf.setText(s.trim());append = true;}} else if ("+-/*".indexOf(s.trim()) != -1) {// 判断按的是否是四则运算符num1 = jtf.getText();// 将第一次输入的数存储起来operator = s.trim();// 将输入的符号存储起来append = false;} else if ("=".equals(s.trim())) {String num2 = jtf.getText();double d1 = Double.parseDouble(num1);double d2 = Double.parseDouble(num2);if ("+".equals(operator)) {// 加法运算d1 = d1 + d2;} else if ("-".equals(operator)) {// 减法运算d1 = d1 - d2;} else if ("*".equals(operator)) {// 乘法运算d1 = d1 * d2;} else if ("/".equals(operator)) {// 除法运算d1 = d1 / d2;}jtf.setText(d1 + "");// 显示结果append = false;} else if (".".equals(s.trim())) {// 判断小数点String temp = jtf.getText();if (temp.indexOf(".") == -1) {jtf.setText(temp + ".");append = true;}} else if ("+/-".equals(s.trim())) {// 判断+/-String temp = jtf.getText();if(temp.startsWith("-")) {// 如果该数是负数则取负号后的数字jtf.setText(temp.substring(1));} else {// 如果是正数则在这个数前加上负号jtf.setText("-" + temp);}} else if ("CE".equals(s.trim()) || "C".equals(s.trim())) {// 判断复位键jtf.setText("0");append = false;} else if ("BackS".equals(s.trim())) {// 判断BackS键(删除)String temp = jtf.getText();if (temp.length() > 0) {jtf.setText(temp.substring(0, temp.length() - 1));}}}public static void main(String[] args) {new Counter();}}。
用java代码写的简易计算器(可以实现基本的加减乘除功能)
⽤java代码写的简易计算器(可以实现基本的加减乘除功能)package A;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.*;public class Calcular3 extends JFrame implements ActionListener,MouseListener{private int m1=0,n=0;//private double m2=0;//运算的数private int flag=0;JFrame f;JPanel p1,p2,p3;JTextField t;JButton b1[]=new JButton[18];String b[]= {"1","2","3","4","5","6","7","8","9","0","清空","退格",".","=","+","-","*","/"};public Calcular3(){f=new JFrame("计算器");t=new JTextField(35);p1=new JPanel();p2=new JPanel();p3=new JPanel();f.setBounds(100, 100, 400, 200);f.add(p1,BorderLayout.NORTH);f.add(p2,BorderLayout.CENTER);f.add(p3,BorderLayout.EAST);p2.setLayout(new GridLayout(5,3));p3.setLayout(new GridLayout(4,1));p1.add(t);for(int i=0;i<14;i++) {b1[i]=new JButton(b[i]);p2.add(b1[i]);b1[i].addActionListener(this);}for(int i=14;i<18;i++) {b1[i]=new JButton(b[i]);p3.add(b1[i]);b1[i].addActionListener(this);}/*for(int i=0;i<18;i++) {b1[i].addActionListener(this);}*/f.setVisible(true);}//实现接⼝的⽅法public void mouseClicked(MouseEvent e) {}public void mousePressed(MouseEvent e) {}public void mouseReleased(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void actionPerformed(ActionEvent e) {String str="";int i;for(i=0;i<=9;i++) {if(e.getSource()==b1[i]) {if(i==9) {n=n*10;}else {n=n*10+i+1;}str=String.valueOf(n);//整形n转换成字符串strt.setText(str);//显⽰到⽂本框上}}for(i=14;i<18;i++) {//+、-、*、/if(e.getSource()==b1[i]) {//匹配运算符m1=Integer.parseInt(t.getText());if(flag==15) {m2=m1+m2;}else if(flag==16) {m2=m1-m2;}else if(flag==17) {m2=m1*m2;}else if(flag==18) {m2=m1/m2;}else m2=m1;//若⽆连续的运算符运算,保存当前数据到m2 if(i==14) flag=15;else if(i==15) flag=16;else if(i==16) flag=17;else flag=18;str=String.valueOf(b[i]);t.setText(str);//显⽰到⽂本框上n=0;//还原,记录下次数据break;//找到匹配数据退出循环}}if(e.getSource()==b1[13]) {//=m1=Integer.parseInt(t.getText());if(flag==15) {m2=m2+m1;}else if(flag==16) {m2=m2-m1;}else if(flag==17) {m2=m2*m1;}else if(flag==18) {m2=m2/m1;}else m2=m1;str=String.valueOf(m2);t.setText(str);//显⽰到⽂本框上n=0;//还原,记录下次数据flag=0;//flag还原0,表明没有未处理的运算符}if(e.getSource()==b1[10]) {//各变量变为0 清空m1=0;m2=0;flag=0;n=0;t.setText("0");//显⽰到⽂本框上}if(e.getSource()==b1[11]) {//退格m1=(int)(Double.parseDouble(t.getText())/10);n=m1;str=String.valueOf(m1);t.setText(str);}if(e.getSource()==b1[12]) {//⼩数点m1=Integer.parseInt(t.getText());str=String.valueOf(m1+b[12]);t.setText(str);//显⽰到⽂本框上int j=0;for(i=0;i<=9;i++) {if(e.getSource()==b1[i]) {j++;m2=Math.pow(0.1, j)*Integer.parseInt(b[i]);str=String.valueOf(m1+m2);t.setText(str);//显⽰到⽂本框上}}}}//主函数public static void main(String[] args) {new Calcular3();}}。
科学计算器代码
Calculate.java/*这是一个计算类,用于普通运算中的各种运算,如2,8,10,16进制的符合运算,复合运算其原理用后缀表达式来实现*/import java.util.*;import ng.Math;class Calculate {//两个内部类来实现数据的存储,如同数据结构中的栈class operator{ char data[];int top;operator(){data = new char [50];top = -1;}};class operator1{ double data[];int top;operator1(){data = new double [20];top = -1;}};public static double jiecheng(double number)//阶乘运算{int number1 = (int)number;double j=1;for(int i=1;i<=number1;i++)j=j*i;return j;}String trans (char exp[],char postexp[])//后缀表达式的翻译函数{int i=0,j=0;boolean m=true;//m用来监视表达式是不有非法的运算符连着输入operator op = new operator();while(exp[j]!='\0'){ switch (exp[j]){case '(':op.top++;op.data[op.top]=exp[j];j++;m= false;break;case ')':while (op.data[op.top]!='('){ postexp[i++]=op.data[op.top];op.top--;}op.top--;j++;break;case '+':case '-':if(!m)return "+或者-附近出现多个运算符在一起的现象!";while (op.top!=-1 && op.data[op.top]!='('){postexp[i++]=op.data[op.top];op.top--;}op.top++;op.data[op.top]=exp[j];j++;m=false;break;case '*':case '/':if(!m)return "*或/附近出现多个运算符在一起的现象!";while(op.top!=-1 && op.data[op.top]!='('&& op.data[op.top]!='+'&& op.data[op.top]!='-'){postexp[i++]=op.data[op.top];op.top--;}op.top++;op.data[op.top]=exp[j];j++;m = false;break;case '^':if(!m)return "^(冥运算符号)附近出现多个运算符在一起的现象!";case 's':case 'c':case 't':case 'l':case '$':case '`':op.top++;op.data[op.top]=exp[j];j++;m = false;break;case '!':op.top++;op.data[op.top]=exp[j];j++;break;case ' ':break;default:while (exp[j]>='0' && exp[j]<='9'||exp[j]=='.'){postexp[i++]=exp[j];j++;}postexp[i++]='#';m = true;}}while (op.top!=-1){postexp[i++]=op.data[op.top];op.top--;}postexp[i]='\0';if(exp[j-1]=='+'||exp[j-1]=='-'||exp[j-1]=='*'||exp[j-1]=='/'||exp[j-1]=='^') return "运算式后缀出现非正常运算符!";return "ok";}String compvalue (char postexp[],int flag)//后缀表达式运算,flag为进制{String ex = new String(postexp);StringTokenizer analy = new StringTokenizer(ex,"#+-`*/sclt!^$");operator1 st = new operator1();double d,d1,d2,a,b,c;int j=0;st.top=-1;while (postexp[j]!='\0'){switch (postexp[j]){case '+':a=st.data[st.top];st.top--;b=st.data[st.top];c=a+b;st.data[st.top]=c;break;case '-':a=st.data[st.top];st.top--;b=st.data[st.top];c=b-a;st.data[st.top]=c;break;case '*':a=st.data[st.top];st.top--;b=st.data[st.top];c=a*b;st.data[st.top]=c;break;case '/':a=st.data[st.top];st.top--;b=st.data[st.top];st.top--;if (a!=0){ c=b/a;st.top++;st.data[st.top]=c;}else{ return "输入错误,除数不能是零!请重新输入!";}break;case 's':a=st.data[st.top];c=Math.sin(Math.toRadians(a));st.data[st.top]=c;break;case 'c':a=st.data[st.top];c=Math.cos(Math.toRadians(a));st.data[st.top]=c;break;case 't':a=st.data[st.top];if(a%180 == 90||(-a)%180==90)return "tan函数值有误!";c=Math.tan(Math.toRadians(a));st.data[st.top]=c;break;case '!':a=st.data[st.top];c=jiecheng(a);st.data[st.top]=c;break;case 'l':a=st.data[st.top];if(a<=0)return "log的真数不能小于等于0";c=Math.log(a);st.data[st.top]=c;break;case '^':a=st.data[st.top];st.top--;b=st.data[st.top];c=Math.pow(b,a);st.data[st.top]=c;break;case '$':a=st.data[st.top];if(a<0)return "开方数不能小于0!";c=Math.sqrt(a);st.data[st.top]=c;break;case '`':a=st.data[st.top];c=0-a;st.data[st.top]=c;break;default:String str =analy.nextToken();//获取后缀表达式的数据if(flag == 2)d = btod(str);else if(flag == 8)d = otod(str);else if(flag == 10)d=Double.parseDouble(str);elsed = htod(str);while (postexp[j]>='0' && postexp[j]<='9'||postexp[j]=='.'){j++;}st.top++;st.data[st.top]=d;break;}j++;}return (String.valueOf(st.data[st.top]));}String check(char c[])//检查函数,用来检查运算式中的低级错误{int k=0,i=0;if(c[0]=='+'||c[0]=='-'||c[0]=='^'||c[0]=='*'||c[0]=='/')return "表达式开始位置不对";while(c[k]!='\0'){if((c[k]>=39 && c[k]<='9'&&c[k]!=',') ||c[k]=='$'||c[k]=='!'||c[k]==' '||c[k]=='c'||c[k]=='s'||c[k]=='t'||c[k]=='^'||c[k]=='l'||c[k]=='`') {}else{return "输入含有非法的字符,请重新输入正确的数学表达式!";}if(c[k]=='(')i++;else if(c[k]==')')i--;k++ ;}if(i!=0){return "输入错误,没有相匹配的括弧!请重新输入!";}return "ok";}double btod(String str)//二进制到十进制的转换{int k = str.indexOf("."),m=0;double p=0.0;if(k ==-1)k =str.length();for(int i =k-1;i>=0;i--){char c = str.charAt(i);int a =Integer.parseInt(""+c);p=p+(a*Math.pow(2, m));m++;}m=-1;for(int i =k+1;i<str.length();i++){char c = str.charAt(i);int a =Integer.parseInt(""+c);p=p+(a*Math.pow(2, m));m--;}return p;}double otod(String str)//八进制到十进制的转换{int k = str.indexOf("."),m=0;double p=0.0;if(k ==-1)k =str.length();for(int i =k-1;i>=0;i--){char c = str.charAt(i);int a =Integer.parseInt(""+c);p=p+(a*Math.pow(8, m));m++;}m=-1;for(int i =k+1;i<str.length();i++){char c = str.charAt(i);int a =Integer.parseInt(""+c);p=p+(a*Math.pow(8, m));m--;}return p;}double htod(String str)//十六进制到十进制的转换{int k = str.indexOf("."),m=0;double p=0.0;if(k ==-1)k =str.length();for(int i =k-1;i>=0;i--){char c = str.charAt(i);int a =Integer.parseInt(""+c);p=p+(a*Math.pow(16, m));m++;}m=-1;for(int i =k+1;i<str.length();i++){char c = str.charAt(i);int a =Integer.parseInt(""+c);p=p+(a*Math.pow(16, m));m--;}return p;}}Main.java//主类public class Main {public static void main(String[] args) {new WinFrame("计算器");}}MyDialog.javaimport java.awt.event.*;import java.awt.*;//帮助文档的对话框类class MyDialog extends Dialog implements ActionListener //建立对话框类{ static final int YES=1,NO=0;int message=-1; Button yes,no;TextArea area;String help;MyDialog(Frame f,String s,boolean b) //构造方法{ super(f,s,b);yes=new Button("确定"); yes.addActionListener(this);no=new Button("取消"); no.addActionListener(this);setLayout(new FlowLayout());help = "使用帮助:\n";help +="本计算器运算方式采用输入整个运算式后进行运算的方式.\n";help +="但由于作者能力有限,对有些运算符进行了重定义,现列出以下运算符:\n";help +="s代表sin,c代表cos,t代表tan,!代表阶乘,l代表log\n";help +="`代表负号,如果要用键盘输入的时候,请正确输入\n";help +="本计算器有4大主要功能:\n";help +="1.进行符合运算,可以用键盘进行输入,执行结果可以按回车获得\n";help +="2.进行2,8,10,16进制的各种运算以及相互转换,16进制没有实现a,b,c,d,e,f的输入\n";help +="3.进行大整数运算\n4.进行批量运算";area = new TextArea(help,10,50,3);//area.setEnabled(false);area.setForeground(Color.BLUE);area.setFont(new Font("宋体",Font.BOLD,16));add(area);add(yes); add(no);yes.setPreferredSize(new Dimension(100,25));no.setPreferredSize(new Dimension(100,25));setBounds(300,300,500,300);addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ message=-1;setVisible(false);}});}public void actionPerformed(ActionEvent e){ if(e.getSource()==yes){ message=YES;setVisible(false);}else if(e.getSource()==no){ message=NO;setVisible(false);}}public int getMessage(){ return message;}}Mypanel.javaimport java.util.*;import java.awt.*;import javax.swing.*;class mypanel extends Panel//派生一个面板,用来实现不同面板的布局{GridLayout grid;JButton btu[];mypanel(String []btuName,int row,int col,Color c){btu = new JButton [btuName.length];grid = new GridLayout(row,col,1,1);setLayout(grid);for(int i=0;i<row;i++)for(int j=0;j<col;j++){if(i*col+j<btuName.length){btu[i*col+j] = new JButton(btuName[i*col+j]);btu[i*col+j].setForeground(c);add(btu[i*col+j]);btu[i*col+j].setPreferredSize(new Dimension(60,25));}elsebreak;}}}WinFrame.javaimport java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import ng.Math;import java.math.*;class WinFrame extends Frame implements ActionListener,KeyListener,ItemListener {mypanel pane1,pane2,pane3,pane4,pane5;Label label1,label2;short j_flag=10;//进制运算的标示,初始化为十进制String strAsk="",strAnswer="";boolean b_flag = true;boolean p_flag = true;//批处理开关TextArea text1;//大整数输出专用域MenuBar menubar;Menu menu1,menu2,menu3;MenuItem item1,item2;MyDialog dialog;//帮助文档对话框CheckboxMenuItem menuitem1,menuitem2,menuitem3;String a[] = {"1","2","3",//用数组进行按钮的命名和消息内容的获取"4","5","6","7","8","9","0",".","+/-"};String a1[] = {"1","2","3","4","5","6","7","8","9","0",".","`"};String b[] ={"/","C","*","→","+","=","-","CE"};String c[] ={"sin","cos","tan","!","pow","sprt","log","pi"};String c1[] ={"s","c","t","!","^","$","l","p"};String d[] ={"( ",")"};String d1[] ={"(",")"};String e[] = {" A"," B"," C"," D"," E","F"};JTextField ask ,answer;char exp[];char postexp[];Checkbox box1,box2,box3,box4,box5;CheckboxGroup jin;String data = "0";//大整数储存数据TextArea text2,text3;int opear;CardLayout mycard;String answer1 = "";// 进制转换时的十进制答案储存Long answer2 = (long)0;//其他进制答案储存Panel pCenter;//添加一个容器装专用数据域void area()//初始化布局,只是不想在构造方法中的东西太多,看起来不方便{mycard = new CardLayout();pCenter = new Panel();pCenter.setLayout(mycard);setLayout(new FlowLayout());setBounds(60,60,450,290);menu1 = new Menu("查看");menu2 = new Menu("系统");menu3 = new Menu("帮助");menuitem1 = new CheckboxMenuItem("普通",true);menuitem2 = new CheckboxMenuItem("批处理",false);menuitem3 = new CheckboxMenuItem("大整数",false);item1 = new MenuItem("退出");item2 = new MenuItem("帮助");menuitem1.addItemListener(this);menuitem2.addItemListener(this);menuitem3.addItemListener(this);item1.addActionListener(this);item2.addActionListener(this);menubar = new MenuBar();menu1.add(menuitem1);menu1.add(menuitem2);menu1.addSeparator();//分隔符menu1.add(menuitem3);menu2.add(item1);menu3.add(item2);menuitem1.setShortcut(new MenuShortcut(KeyEvent.VK_P));menuitem2.setShortcut(new MenuShortcut(KeyEvent.VK_D)); menuitem3.setShortcut(new MenuShortcut(KeyEvent.VK_B)); item1.setShortcut(new MenuShortcut(KeyEvent.VK_Q)); item2.setShortcut(new MenuShortcut(KeyEvent.VK_F1));menubar.add(menu2);menubar.add(menu1);menubar.add(menu3);setMenuBar(menubar);dialog = new MyDialog(this,"帮助文档",true);pane1 = new mypanel(a,4,3,Color.red);pane3 = new mypanel(c,4,2,Color.black);pane2 = new mypanel(d,1,2,Color.black);pane4 = new mypanel(b,4,2,Color.BLUE);pane5 = new mypanel(e,1,6,Color.red);jin = new CheckboxGroup();box1 = new Checkbox("二进制",false,jin);box2 = new Checkbox("八进制",false,jin);box3 = new Checkbox("十进制",true,jin);box4 = new Checkbox("十六进制",false,jin);box5 = new Checkbox("大整数运算");pane3 = new mypanel(c,4,2,Color.black);for(int i=0;i<8;i++)pane3.btu[i].addActionListener(this);box1.addItemListener(this);box2.addItemListener(this);box3.addItemListener(this);box4.addItemListener(this);box5.addItemListener(this);for(int i=0;i<12;i++)pane1.btu[i].addActionListener(this);for(int i=0;i<2;i++)pane2.btu[i].addActionListener(this);for(int i=0;i<8;i++)pane4.btu[i].addActionListener(this);ask = new JTextField(38);ask.setHorizontalAlignment(JTextField.RIGHT);answer = new JTextField(38);ask.addKeyListener(this);answer.setHorizontalAlignment(JTextField.RIGHT); answer.setEditable(false);add(ask);add(answer);add(box5);add(box1);add(box2);add(box3);add(box4);text1= new TextArea("",6,10,3);text1.setForeground(Color.BLUE);pCenter.add("1",pane3);pCenter.add("2",text1);add(pCenter);add(pane1);add(pane4);add(pane2);add(pane5);label1 = new Label("请按格式输入批处理的数据,按空格输入下一个,回车输出答案。
java计算器程序代码
import java.awt.*;//计算器实例import java.awt.event.*;public class calculator{public static void main(String args[]){MyWindow my=new MyWindow("计算器");}}class MyWindow extends Frame implements ActionListener{ StringBuffer m=new StringBuffer();int p;TextField tex;Buttonb0,b1,b2,b3,b4,b5,b6,b7,b8,b9,jia,jian,cheng,chu,deng,dian,qingling,kaifang;MyWindow(String s){super(s);//StringBuffer s2=new StringBuffer();//String s;tex=new TextField(18);b0=new Button(" 0 ");b1=new Button(" 1 ");b2=new Button(" 2 ");b3=new Button(" 3 ");b4=new Button(" 4 ");b5=new Button(" 5 ");b6=new Button(" 6 ");b7=new Button(" 7 ");b8=new Button(" 8 ");b9=new Button(" 9 ");dian=new Button(" . ");jia=new Button(" + ");jian=new Button(" - ");cheng=new Button(" × ");chu=new Button(" / ");deng=new Button(" = ");qingling=new Button(" 清零 ");kaifang=new Button(" √ ");setLayout(new FlowLayout());add(tex);add(b0);add(b1);add(b2);add(b3);add(b4);add(b5);add(b6);add(b7);add(b8);add(b9);add(dian);add(jia);add(jian);add(cheng);add(chu);add(kaifang);add(qingling);add(deng);b0.addActionListener(this);b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);b4.addActionListener(this);b5.addActionListener(this);b6.addActionListener(this);b7.addActionListener(this);b8.addActionListener(this);b9.addActionListener(this);jia.addActionListener(this);jian.addActionListener(this);cheng.addActionListener(this);chu.addActionListener(this);dian.addActionListener(this);deng.addActionListener(this);qingling.addActionListener(this); kaifang.addActionListener(this);setBounds(200,200,160,280);setResizable(false);//不可改变大小setVisible(true);validate();addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent ee){ System.exit(0);}});}public void actionPerformed(ActionEvent e){if(e.getSource()==b0){m=m.append("0");tex.setText(String.valueOf(m));}if(e.getSource()==b1){m=m.append("1"); tex.setText(String.valueOf(m)); }if(e.getSource()==b2){m=m.append("2"); tex.setText(String.valueOf(m)); }if(e.getSource()==b3){m=m.append("3"); tex.setText(String.valueOf(m)); }if(e.getSource()==b4){m=m.append("4"); tex.setText(String.valueOf(m));}if(e.getSource()==b5){m=m.append("5"); tex.setText(String.valueOf(m)); }if(e.getSource()==b6){m=m.append("6"); tex.setText(String.valueOf(m)); }if(e.getSource()==b7){m=m.append("7"); tex.setText(String.valueOf(m)); }if(e.getSource()==b8){m=m.append("8"); tex.setText(String.valueOf(m)); }if(e.getSource()==b9){m=m.append("9"); tex.setText(String.valueOf(m)); }if(e.getSource()==jia){m=m.append("+"); tex.setText(String.valueOf(m)); }if(e.getSource()==jian){m=m.append("-"); tex.setText(String.valueOf(m)); }if(e.getSource()==cheng){m=m.append("*"); tex.setText(String.valueOf(m)); }if(e.getSource()==chu){m=m.append("/"); tex.setText(String.valueOf(m)); }if(e.getSource()==dian){m=m.append("."); tex.setText(String.valueOf(m)); }String mm=String.valueOf(m);int p1=mm.indexOf("+");int p2=mm.indexOf("-");int p3=mm.indexOf("*");int p4=mm.indexOf("/");if(p1!=-1){p=p1;}else if(p3!=-1){p=p3;}else if(p2!=-1){p=p2;}else if(p4!=-1){p=p4;}if(e.getSource()==deng){String m1=mm.substring(0,p);String m2=mm.substring(p+1);String ch=mm.substring(p,p+1);//System.out.println(m1);//System.out.println(m2);//System.out.println(ch);if(ch.equals("+")){float n1=Float.parseFloat(m1); float n2=Float.parseFloat(m2); float sum=n1+n2;String su=String.valueOf(sum); tex.setText(su);}if(ch.equals("-")){float n1=Float.parseFloat(m1);float n2=Float.parseFloat(m2);float sum=n1-n2;String su=String.valueOf(sum);tex.setText(su);}if(ch.equals("*")){float n1=Float.parseFloat(m1);float n2=Float.parseFloat(m2);float sum=n1*n2;String su=String.valueOf(sum);tex.setText(su);}if(ch.equals("/")){float n1=Float.parseFloat(m1);float n2=Float.parseFloat(m2);float sum=n1/n2;String su=String.valueOf(sum);tex.setText(su);}}if(e.getSource()==qingling){StringBuffer kk=new StringBuffer(); m=kk;tex.setText("0");// System.out.println(mm);}if(e.getSource()==kaifang){String t=tex.getText();float num=Float.parseFloat(t);double nub=Math.sqrt(num);tex.setText(String.valueOf(nub)); }}}。
计算器源代码
今天在一个QQ群上看到一位朋友发了一个编译未通过的Java计算器源代码,遂收藏下来并将其更正。
Mark之,以供日后参考。
程序比较简单,可以说并不是很好的设计,但对于Java中swing及awt的使用,可以作为一个简单有效的例子。
运行起来如下图所示:下面,将此Java程序分享一下(详细描述见注释):/** @(#)JCalculator.java 1.00 12/29/2009** Email: light_warm@*/import java.awt.*;import java.awt.event.*;import javax.swing.*;/*** A simple calculator program.* <p>I saw this program in a QQ group, and help a friend correct it.</p> ** @author Singyuen Yip* @version 1.00 12/29/2009* @see JFrame* @see ActionListener*/public class JCalculator extends JFrame implements ActionListener { /*** Serial Version UID*/private static final long serialVersionUID = -169068472193786457L;/*** This class help close the Window.* @author Singyuen Yip**/private class WindowCloser extends WindowAdapter {public void windowClosing(WindowEvent we) {System.exit(0);}}int i;// Strings for Digit & Operator buttons.private final String[] str= { "7", "8", "9", "/", "4", "5", "6", "*", "1","2", "3", "-", ".", "0", "=", "+" };// Build buttons.JButton[] buttons = new JButton[str.length];// For cancel or reset.JButton reset = new JButton("CE");// Build the text field to show the result.JTextField display = new JTextField("0");/*** Constructor without parameters.*/public JCalculator() {super("Calculator");// Add a panel.JPanel panel1 = new JPanel(new GridLayout(4, 4));// panel1.setLayout(new GridLayout(4,4));for (i = 0; i < str.length; i++) {buttons[i] = new JButton(str[i]);panel1.add(buttons[i]);}JPanel panel2 = new JPanel(new BorderLayout());// panel2.setLayout(new BorderLayout());panel2.add("Center", display);panel2.add("East", reset);// JPanel panel3 = new Panel();getContentPane().setLayout(new BorderLayout());getContentPane().add("North", panel2);getContentPane().add("Center", panel1);// Add action listener for each digit & operator button.for (i = 0; i < str.length; i++)buttons[i].addActionListener(this);// Add listener for "reset" button.reset.addActionListener(this);// Add listener for "display" button.display.addActionListener(this);// The "close" button "X".addWindowListener(new WindowCloser());// Initialize the window size.setSize(800, 800);// Show the window.// show(); Using show() while JDK version is below 1.5.setVisible(true);// Fit the certain size.pack();}public void actionPerformed(ActionEvent e) {Object target = e.getSource();String label = e.getActionCommand();if (target == reset)handleReset();else if ("0123456789.".indexOf(label) > 0)handleNumber(label);elsehandleOperator(label);}// Is the first digit pressed?boolean isFirstDigit = true;/*** Number handling.* @param key the key of the button.*/public void handleNumber(String key) {if (isFirstDigit)display.setText(key);else if ((key.equals(".")) && (display.getText().indexOf(".") < 0))display.setText(display.getText() + ".");else if (!key.equals("."))display.setText(display.getText() + key);isFirstDigit = false;}/*** Reset the calculator.*/public void handleReset() {display.setText("0");isFirstDigit = true;operator = "=";}double number = 0.0;String operator = "=";/*** Handling the operation.* @param key pressed operator's key.*/public void handleOperator(String key) {if (operator.equals("+"))number += Double.valueOf(display.getText());else if (operator.equals("-"))number -= Double.valueOf(display.getText());else if (operator.equals("*"))number *= Double.valueOf(display.getText());else if (operator.equals("/"))number /= Double.valueOf(display.getText());else if (operator.equals("="))number = Double.valueOf(display.getText());display.setText(String.valueOf(number));operator = key;isFirstDigit = true;}public static void main(String[] args) {new JCalculator();}}。
Java实现简易计算器
Java实训作业题目:Java实现简易计算器学院:姓名:学号:班级:20 年月一、实验目的通过课程设计,主要要达到两个目的,一是检验和巩固专业知识、二是提高综合素质和能力。
此次课程设计实训主要是Java语言程序设计的实现。
通过该课程设计,可以将课堂上掌握的理论知识与处理数据的业务相结合,以检验自己掌握知识的宽度、深度及对知识的综合运用能力。
二、实验要求用Java编写一个简单的计算器,使其能够实现最基本的功能,如简单的加、减、乘、除;平方根,倒数,平方等功能。
三、详细内容1.界面设计界面设计使用GUI,其中有用到swing组件的TextField和Button,用到awt中的BorderLayout和GridLayout布局管理方式,其图形界面如图1-1所示:图1-1其中主要代码为:public mainWindow(){this.setTitle("计算器");//用户图形界面标题this.setVisible(true);//用户图形界面可缩小this.setResizable(false);//用户图形界面不可放大this.setSize(350,300);//设置用户图形界面的大小this.setLocation(400,150);//用户图形界面在屏幕中的显示位置JPanel panel1 = new JPanel();//新建一个画板JPanel panel2 = new JPanel();button1 = new JButton("1");...reset = new JButton("CE");Container container = this.getContentPane();container.add(panel2,BorderLayout.NORTH);container.add(panel1);panel1.setLayout(new GridLayout(5,4));//将画板1分为4行5列result.setEnabled(false);result.setFont(new Font("Dialog",Font.BOLD,25));//运算结果的字体大小result.setEditable(false);result.setHorizontalAlignment(SwingConstants.RIGHT);panel1.add(reciprocal);//分别将20个按钮依次添加到画板panel1中,并设置各自的大小reciprocal.setFont(new Font("Dialog",Font.PLAIN,20));...panel1.add(divide);divide.setFont(new Font("Dialog",Font.PLAIN,20));panel2.setLayout(new GridLayout());panel2.add(result);//画板panel2添加运算结果2.四则运算较为简单的实现了简单的加、减、乘、除运算,主要代码如下:ActionListener equal1 = new ActionListener(){ //实现四则运算public void actionPerformed(ActionEvent e){String str = result.getText();b = DatatypeConverter.parseDouble(str);{if(flag == "+")c = a + b;else if(flag == "-")c = a - b;else if(flag == "*")c = a * b;else if(flag == "/" || b != 0)c = a / b;}if(flag != "=")result.setText("" + c);elseresult.setText("零不能做除数!");a = 0;b = 0;c = 0;flag = "";}};3.其他功能另外添加了平方根,倒数,平方等功能,主要代码如下:平方根运算的实现:ActionListener sqrt1= new ActionListener(){public void actionPerformed(ActionEvent e){String str = result.getText();double i = DatatypeConverter.parseDouble(str);i = Math.sqrt(i);result.setText("" + i);}};倒数运算的实现:ActionListener reciprocal1 = new ActionListener(){ public void actionPerformed(ActionEvent e){String str = result.getText();double i = DatatypeConverter.parseDouble(str);i = 1/i;result.setText("" + i);}};平方运算的实现:ActionListener square1 = new ActionListener(){public void actionPerformed(ActionEvent e){String str = result.getText();double i = DatatypeConverter.parseDouble(str);i = i*i;result.setText("" + i);}};4.程序测试经测试发现本计算器基本功能均能实现,可正常运行计算,针对功能实现的代码部分过于简单,可以对其进行改善提高,方便用户使用!5.实训小结通过对计算器窗体的编写,熟悉了java图形用户界面的设计原理和程序结构,熟悉了java中awt和swing的组合。
java计算器源代码(仿win7)
java计算器源代码(仿win7)import java.awt.*;import javax.swing.*;import java.awt.event.*;class Cal extends JFrame implements ActionListener,MouseListener{JMenuBar menubar;JMenu menu_check,menu_edit,menu_help;JMenuItem menuitem_science,menuitem_check,menuitem_exit,menuitem_copy,menuitem_paste,menuitem1_copy,menuitem1_paste,menuitem_chelp,menuitem_about;JCheckBoxMenuItem menuitem_standard;JTextField ta1;int x,result2;double op1,op2,opall;private boolean end=false,flag=false,add=false,sub=false,cheng=false,chu=false,flagop2=false;JButton b_mc,b_mr,b_ms,b_mjia,b_mjian,b_tui,b_ce,b_c,b_jj,b_dui,b_7,b_8,b_9,b_chu,b_baifenhao,b_4,b_5,b_6,b_cheng,b_daoshu,b_1,b_2,b_3,b_jian,b_0,b_dian,b_jia,b_dengyu;JPanel p_all,p_button1,p_button2,p_txt,p1,p2,p3,p4,p5;private String str,resultstr;JPopupMenu popupmenu;Container con=this.getContentPane();Font font=new Font("微软雅黑",Font.PLAIN,12);Color color=new Color(120,220,120);Cal(String s){super(s);setSize(220,315);setResizable(false);setVisible(true);Dimension scr=Toolkit.getDefaultToolkit().getScreenSize();Dimension frm=this.getSize();setLocation((scr.width-frm.width)/2,(scr.height-frm.height)/2);Toolkit tk=Toolkit.getDefaultToolkit();//程序默认图标设置setIconImage(tk.createImage("D:\\sd.jpg"));setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//-----------------------------------------------------------------制作框架结构------------------------- //---------------------------------------菜单栏---------------------------menubar=new JMenuBar();menubar.setPreferredSize(new Dimension(frm.width,19));menu_check=new JMenu("查看(V)");menu_check.setFont(font);menu_check.setForeground(Color.black);menuitem_standard=new JCheckBoxMenuItem("标准型",true);menuitem_standard.setFont(font);menuitem_standard.setForeground(Color.black);menuitem_science=new JMenuItem("科学型");menuitem_science.setFont(font);menuitem_science.setForeground(Color.black);menuitem_check=new JMenuItem("查看分组");menuitem_check.setFont(font);menuitem_check.setForeground(Color.black);menuitem_exit=new JMenuItem("退出");menuitem_exit.setFont(font);menuitem_exit.setForeground(Color.black);menuitem_exit.addActionListener(this);menu_check.add(menuitem_standard);menu_check.add(menuitem_science);menu_check.addSeparator();menu_check.add(menuitem_check);menu_check.addSeparator();menu_check.add(menuitem_exit);menubar.add(menu_check);menu_edit=new JMenu("编辑(E)");menu_edit.setFont(font);menu_edit.setForeground(Color.black);menu_edit.setMnemonic(KeyEvent.VK_E);menuitem_copy=new JMenuItem("复制(C) ");menuitem_copy.setFont(font);menuitem_copy.setForeground(Color.black);menuitem_copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_M ASK));menuitem_copy.addActionListener(this);menuitem_paste=new JMenuItem("粘贴(P) ");menuitem_paste.setFont(font);menuitem_paste.setForeground(Color.black);menuitem_paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_M ASK));menuitem_paste.addActionListener(this);menu_edit.add(menuitem_copy);menu_edit.add(menuitem_paste);menubar.add(menu_edit);menu_help=new JMenu("帮助(H)");menu_help.setFont(font);menu_help.setForeground(Color.black);menuitem_chelp=new JMenuItem("查看帮助");menuitem_chelp.setFont(font);menuitem_chelp.setForeground(Color.black);menuitem_about=new JMenuItem("关于计算器");menuitem_about.setFont(font);menuitem_about.setForeground(Color.black);menuitem_about.addActionListener(this);menu_help.add(menuitem_chelp);menu_help.addSeparator();menu_help.add(menuitem_about);menubar.add(menu_help);setJMenuBar(menubar);//--------------------------------------文本框----------------------------------ta1=new JTextField("0");ta1.setFont(new Font("微软雅黑",Font.PLAIN,13));ta1.setEditable(false);//ta1.setOpaque(false);ta1.setHorizontalAlignment(JTextField.RIGHT);ta1.setPreferredSize(new Dimension((frm.width-26),45));ta1.addMouseListener(this);p_all=new JPanel();p_all.setPreferredSize(new Dimension((frm.width-6),250));//p_all.setBackground(color);p_all.setLayout(new FlowLayout(FlowLayout.CENTER,0,3));p_txt=new JPanel();p_txt.setPreferredSize(new Dimension((frm.width-6),53));p_txt.setLayout(new FlowLayout(FlowLayout.CENTER,0,7));p_txt.add(ta1);p_all.add(p_txt);con.add(p_all,BorderLayout.CENTER);//-------------------------------------按钮区----------------------------------p_button1=new JPanel();p_button1.setPreferredSize(new Dimension((frm.width-25),131)); p_button1.setLayout(new FlowLayout(FlowLayout.LEFT,0,3));p_all.add(p_button1);p1=new JPanel();p1.setPreferredSize(new Dimension((frm.width-25),127));p1.setLayout(new GridLayout(4,5,5,6));b_mc=new JButton("MC");b_mc.setFont(new Font("微软雅黑",Font.PLAIN,11));b_mc.setMargin(new Insets(0,0,0,0));b_mc.setForeground(Color.blue);b_mc.addActionListener(this);b_mr=new JButton("MR");b_mr.setFont(new Font("微软雅黑",Font.PLAIN,11));b_mr.setMargin(new Insets(0,0,0,0));b_mr.setForeground(Color.blue);b_mr.addActionListener(this);b_ms=new JButton("MS");b_ms.setFont(new Font("微软雅黑",Font.PLAIN,11));b_ms.setMargin(new Insets(0,0,0,0));b_ms.setForeground(Color.blue);b_ms.addActionListener(this);b_mjia=new JButton("M+");b_mjia.setFont(new Font("微软雅黑",Font.PLAIN,11));b_mjia.setMargin(new Insets(0,0,0,0));b_mjia.setForeground(Color.blue);b_mjia.addActionListener(this);b_mjian=new JButton("M-");b_mjian.setFont(new Font("微软雅黑",Font.PLAIN,11)); b_mjian.setMargin(new Insets(0,0,0,0));b_mjian.setForeground(Color.blue);b_mjian.addActionListener(this);b_tui=new JButton("←");b_tui.setFont(new Font("微软雅黑",Font.BOLD,14));b_tui.setMargin(new Insets(0,0,0,0));b_tui.addActionListener(this);b_tui.setForeground(Color.red);b_ce=new JButton("CE");b_ce.setFont(new Font("微软雅黑",Font.PLAIN,11));b_ce.setMargin(new Insets(0,0,0,0));b_ce.setForeground(Color.red);b_ce.addActionListener(this);b_c=new JButton("C");b_c.setFont(new Font("微软雅黑",Font.PLAIN,11));b_c.setMargin(new Insets(0,0,0,0));b_c.setForeground(Color.red);b_c.addActionListener(this);b_jj=new JButton("±");b_jj.setFont(new Font("微软雅黑",Font.PLAIN,14));b_jj.setMargin(new Insets(0,0,0,0));b_jj.setForeground(Color.red);b_jj.addActionListener(this);b_dui=new JButton("√");b_dui.setFont(new Font("微软雅黑",Font.PLAIN,11)); b_dui.setMargin(new Insets(0,0,0,0));b_dui.setForeground(Color.red);b_dui.addActionListener(this);b_7=new JButton("7");b_7.setFont(new Font("微软雅黑",Font.PLAIN,14));b_7.setMargin(new Insets(0,0,0,0));b_7.setForeground(Color.blue);b_7.setMnemonic(KeyEvent.VK_7);b_7.addActionListener(this);b_8=new JButton("8");b_8.setFont(new Font("微软雅黑",Font.PLAIN,14));b_8.setMargin(new Insets(0,0,0,0));b_8.setForeground(Color.blue);b_8.setMnemonic(KeyEvent.VK_8);b_8.addActionListener(this);b_9=new JButton("9");b_9.setMargin(new Insets(0,0,0,0));b_9.setForeground(Color.blue);b_9.setMnemonic(KeyEvent.VK_9);b_9.addActionListener(this);b_chu=new JButton("/");b_chu.setFont(new Font("微软雅黑",Font.PLAIN,14));b_chu.setMargin(new Insets(0,0,0,0));b_chu.setForeground(Color.red);b_chu.addActionListener(this);b_baifenhao=new JButton("%");b_baifenhao.setFont(new Font("微软雅黑",Font.PLAIN,11)); b_baifenhao.setMargin(new Insets(0,0,0,0));b_baifenhao.setForeground(Color.blue);b_baifenhao.addActionListener(this);b_4=new JButton("4");b_4.setFont(new Font("微软雅黑",Font.PLAIN,14));b_4.setMargin(new Insets(0,0,0,0));b_4.setForeground(Color.blue);b_4.setMnemonic(KeyEvent.VK_4);b_4.addActionListener(this);b_5=new JButton("5");b_5.setFont(new Font("微软雅黑",Font.PLAIN,14));b_5.setMargin(new Insets(0,0,0,0));b_5.setForeground(Color.blue);b_5.setMnemonic(KeyEvent.VK_5);b_5.addActionListener(this);b_6=new JButton("6");b_6.setFont(new Font("微软雅黑",Font.PLAIN,14));b_6.setMargin(new Insets(0,0,0,0));b_6.setForeground(Color.blue);b_6.setMnemonic(KeyEvent.VK_6);b_6.addActionListener(this);b_cheng=new JButton("*");b_cheng.setFont(new Font("微软雅黑",Font.PLAIN,14));b_cheng.setMargin(new Insets(0,0,0,0));b_cheng.setForeground(Color.red);b_cheng.addActionListener(this);b_daoshu=new JButton("1/x");b_daoshu.setFont(new Font("微软雅黑",Font.PLAIN,11)); b_daoshu.setMargin(new Insets(0,0,0,0));b_daoshu.setForeground(Color.blue);b_daoshu.addActionListener(this);b_1=new JButton("1");b_1.setMargin(new Insets(0,0,0,0));b_1.setForeground(Color.blue);b_1.setMnemonic(KeyEvent.VK_1);b_1.addActionListener(this);b_2=new JButton("2");b_2.setFont(new Font("微软雅黑",Font.PLAIN,14)); b_2.setMargin(new Insets(0,0,0,0));b_2.setForeground(Color.blue);b_2.setMnemonic(KeyEvent.VK_2);b_2.addActionListener(this);b_3=new JButton("3");b_3.setFont(new Font("微软雅黑",Font.PLAIN,14)); b_3.setMargin(new Insets(0,0,0,0));b_3.setForeground(Color.blue);b_3.setMnemonic(KeyEvent.VK_3);b_3.addActionListener(this);b_jian=new JButton("-");b_jian.setFont(new Font("微软雅黑",Font.PLAIN,14)); b_jian.setMargin(new Insets(0,0,0,0));b_jian.setForeground(Color.red);b_jian.addActionListener(this);b_0=new JButton("0");b_0.setFont(new Font("微软雅黑",Font.PLAIN,14)); b_0.setMargin(new Insets(0,0,0,0));b_0.setPreferredSize(new Dimension(75,27));b_0.setForeground(Color.blue);b_0.setMnemonic(KeyEvent.VK_0);b_0.addActionListener(this);JLabel L1=new JLabel();L1.setPreferredSize(new Dimension(5,3));b_dian=new JButton(".");b_dian.setFont(new Font("微软雅黑",Font.BOLD,14)); b_dian.setMargin(new Insets(0,0,0,0));b_dian.setPreferredSize(new Dimension(35,27));b_dian.setForeground(Color.blue);b_dian.addActionListener(this);JLabel L2=new JLabel();L2.setPreferredSize(new Dimension(5,3));b_jia=new JButton("+");b_jia.setFont(new Font("微软雅黑",Font.BOLD,14)); b_jia.setMargin(new Insets(0,0,0,0));b_jia.setPreferredSize(new Dimension(35,27));b_jia.setForeground(Color.red);b_jia.addActionListener(this);b_dengyu=new JButton("=");b_dengyu.setFont(new Font("微软雅黑",Font.BOLD,22));b_dengyu.setMargin(new Insets(0,0,0,0));b_dengyu.setPreferredSize(new Dimension(35,60));b_dengyu.setForeground(Color.blue);b_dengyu.addActionListener(this);p1.add(b_mc);p1.add(b_mr);p1.add(b_ms);p1.add(b_mjia);p1.add(b_mjian);p1.add(b_tui);p1.add(b_ce);p1.add(b_c);p1.add(b_jj);p1.add(b_dui);p1.add(b_7);p1.add(b_8);p1.add(b_9);p1.add(b_chu);p1.add(b_baifenhao);p1.add(b_4);p1.add(b_5);p1.add(b_6);p1.add(b_cheng);p1.add(b_daoshu);p_button1.add(p1);p_button2=new JPanel();p_button2.setPreferredSize(new Dimension((frm.width-24),65)); p_button2.setLayout(new FlowLayout(FlowLayout.LEFT,0,0));p_all.add(p_button2);p2=new JPanel();p2.setPreferredSize(new Dimension(156,65));p2.setLayout(new FlowLayout(FlowLayout.LEFT,0,1));p3=new JPanel();p3.setPreferredSize(new Dimension(39,62));p3.setLayout(new FlowLayout(FlowLayout.LEFT,4,0));p_button2.add(p2);p_button2.add(p3);p4=new JPanel();p4.setPreferredSize(new Dimension(156,27));p4.setLayout(new GridLayout(1,4,5,5));p5=new JPanel();p5.setPreferredSize(new Dimension(156,39));p5.setLayout(new FlowLayout(FlowLayout.LEFT,0,5));p2.add(p4);p2.add(p5);p4.add(b_1);p4.add(b_2);p4.add(b_3);p4.add(b_jian);p5.add(b_0);p5.add(L1);p5.add(b_dian);p5.add(L2);p5.add(b_jia);p3.add(b_dengyu);//---------------------------------------快捷菜单对象-------------------------popupmenu=new JPopupMenu(); //快捷菜单对象menuitem1_copy=new JMenuItem("复制");menuitem1_copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_ MASK));menuitem1_copy.addActionListener(this); //监视鼠标右击菜单”复制“popupmenu.add(menuitem1_copy);menuitem1_paste=new JMenuItem("粘贴");menuitem1_paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));menuitem1_paste.addActionListener(this); //监视鼠标右击菜单”粘贴“popupmenu.add(menuitem1_paste);ta1.add(popupmenu);con.validate();validate();}//---------------------------------------功能区------------------------------------public void actionPerformed(ActionEvent e){if(e.getSource()==menuitem_about){JOptionPane.showMessageDialog(null,"这是一个模仿win7的计算器!欢迎改进,\n创作者:钟作明","仿win7计算器",RMATION_MESSAGE);}if(e.getSource()==menuitem1_copy){ta1.selectAll();ta1.copy();}else if(e.getSource()==menuitem1_paste){ta1.setEditable(true);ta1.setText("");ta1.paste();ta1.setEditable(false);}else if(e.getSource()==menuitem_copy){ta1.selectAll();ta1.copy();}else if(e.getSource()==menuitem_paste){ta1.setEditable(true);ta1.setText("");ta1.paste();ta1.setEditable(false);}else if(e.getSource()==menuitem_exit){System.exit(0);}else if(e.getSource()==b_ce){ta1.setEditable(true);ta1.setText("0");ta1.setEditable(false);}else if(e.getSource()==b_c){ta1.setEditable(true);ta1.setText("0");ta1.setEditable(false);}else if(e.getSource()==b_tui){String str=ta1.getText();StringBuffer s=new StringBuffer(str);int L=s.length();try{if(L!=1){s=s.deleteCharAt(L-1);}else{s=new StringBuffer("0");}}catch(Exception e1){}ta1.setText(String.valueOf(s));}//---------------------------------------------数字键----------------------------- if(e.getSource()==b_1){addString(1);}else if(e.getSource()==b_2){addString(2);}else if(e.getSource()==b_3){addString(3);}else if(e.getSource()==b_4){addString(4);}else if(e.getSource()==b_5){addString(5);}else if(e.getSource()==b_6){addString(6);}else if(e.getSource()==b_7){addString(7);}else if(e.getSource()==b_8){addString(8);}else if(e.getSource()==b_9){addString(9);}else if(e.getSource()==b_0){addString(0);}else if(e.getSource()==b_dian){StringBuffer s1=new StringBuffer(ta1.getText());StringBuffer dian=new StringBuffer(".");if(String.valueOf(s1).indexOf(".")==-1){s1.append(dian);}ta1.setText(String.valueOf(s1));}else if(e.getSource()==b_jj){String txt=ta1.getText();int result=Integer.parseInt(txt);if(txt.indexOf("-")==-1&&txt.length()>0){if(result!=0){txt="-"+txt;}}else{StringBuffer txt1=new StringBuffer(txt);txt1=txt1.deleteCharAt(0);txt=String.valueOf(txt1);}ta1.setText(txt);}else if(e.getSource()==b_dui){str=ta1.getText();Double d=Double.parseDouble(str);if(d>=0){double d1=Math.sqrt(d);String s = String.valueOf(d1);if(s.endsWith(".0")==true){int z=(int)d1;str=String.valueOf(z);}else{str=String.valueOf(d1);}ta1.setText(str);}else{JOptionPane.showMessageDialog(null,"根号底数不能为负数","提醒", RMATION_MESSAGE);}end=true;}else if(e.getSource()==b_baifenhao){str=ta1.getText();Double d=Double.parseDouble(str);ta1.setText(""+d/100);end=true;}else if(e.getSource()==b_daoshu){str=ta1.getText();Double d=Double.parseDouble(str);if(d!=0){ta1.setText(""+1/d);}else{JOptionPane.showMessageDialog(null,"除数不能为零","提醒", RMATION_MESSAGE);}end=true;}else if(e.getSource()==b_jia){str = ta1.getText();op1 = Double.parseDouble(str);end=true;x=0;opall=op1;flagop2=false;}else if(e.getSource()==b_jian){str = ta1.getText();op1 = Double.parseDouble(str);end=true;x=1;opall=op1;flagop2=false;}else if(e.getSource()==b_cheng){str = ta1.getText();op1 = Double.parseDouble(str);end=true;x=2;opall=op1;flagop2=false;}else if(e.getSource()==b_chu){str = ta1.getText();op1 = Double.parseDouble(str);end=true;x=3;opall=op1;flagop2=false;}else if(e.getSource()==b_dengyu){str = ta1.getText();if(flagop2==false){op2 = Double.parseDouble(str);flagop2=true;}switch(x){case 0 :opall=opall+op2;String s=String.valueOf(opall);if(s.endsWith(".0")==true){result2=(int)opall;resultstr=String.valueOf(result2);}else{resultstr=String.valueOf(opall);}ta1.setText(resultstr);break;case 1 :opall=opall-op2;s=String.valueOf(opall);if(s.endsWith(".0")==true){result2=(int)opall;resultstr=String.valueOf(result2);}else{resultstr=String.valueOf(opall);}ta1.setText(resultstr);break;case 2 :opall=opall*op2;s=String.valueOf(opall);if(s.endsWith(".0")==true){result2=(int)opall;resultstr=String.valueOf(result2);}else{resultstr=String.valueOf(opall);}ta1.setText(resultstr);break;case 3 :opall=opall/op2;s=String.valueOf(opall);if(s.endsWith(".0")==true){result2=(int)opall;resultstr=String.valueOf(result2);}else{resultstr=String.valueOf(opall);}ta1.setText(resultstr);break;}end=true;}}public void addString(int num){String s=null;s=String.valueOf(num);//如果end==true;,那么屏幕清空if(end==true){ta1.setText("0");end=false;}if((ta1.getText()).equals("0")){ta1.setText(s);}else{if(ta1.getText().length()<21){str=ta1.getText()+s;ta1.setText(str);}}}public void mouseClicked(MouseEvent mec){if(mec.getModifiers()==mec.BUTTON3_MASK){popupmenu.show(ta1,mec.getX(),mec.getY());}}public void mousePressed(MouseEvent ms){}public void mouseReleased(MouseEvent md){}public void mouseEntered(MouseEvent ms){}public void mouseExited(MouseEvent mex){}public void mouseDragged(MouseEvent med){}}public class Calculator {public static void main(String[] args) {// TODO Auto-generated method stubCal jishuanji=new Cal("计算器");}}。
JAVA计算器
import java.awt.*;import java.awt.event.*;import javax.swing.*;public class jisuanqi extends JFrame implements ActionListener,ItemListener{//ItemListener用于捕获带有item的组件产生的事件JTextField text;JTextField textMemory;//内存中记录boolean clickable;double memoryd;int memoryi;String copy;public jisuanqi(){super("计算器");setSize(450,230);}public void init(){clickable = true;JPanel pa1=new JPanel();pa1.setBackground(new Color(236,231,210));//设置背景色text=new JTextField("0.",38);//设置文本框长度text.setHorizontalAlignment(JTextField.RIGHT);//从右到左pa1.add("North",text);//面板添加和按钮的设置JPanel pa=new JPanel();JPanel pa2=new JPanel();JButton bt1=new JButton("Backspace");JButton bt2=new JButton("CE");JButton bt3=new JButton("c");bt3.setForeground(Color.red);bt3.setBackground(Color.gray);JButton bt4=new JButton("π");bt1.addActionListener(this);//添加监听器bt2.addActionListener(this);bt3.addActionListener(this);bt4.addActionListener(this);pa2.add(bt1);pa2.add(bt2);pa2.add(bt3);pa2.add(bt4);pa2.setLayout(new GridLayout(1,5));pa.setLayout(new BorderLayout());pa.add(pa2,"North");JPanel p1=new JPanel();p1.setLayout(new GridLayout(5,2));JButton bt5=new JButton("sin");JButton bt6=new JButton("cos");JButton bt7=new JButton("MC");JButton bt9=new JButton("MR");JButton bt11=new JButton("MS");JButton bt13=new JButton("M+");JButton bt12=new JButton("n!");JButton bt14=new JButton("%");JButton bt8=new JButton("x²");JButton bt10=new JButton("x³");bt5.addActionListener(this);//THIS的意思是指调用该类的实例对象bt6.addActionListener(this);bt7.addActionListener(this);bt8.addActionListener(this);bt9.addActionListener(this);bt10.addActionListener(this);bt11.addActionListener(this);bt12.addActionListener(this);bt13.addActionListener(this);bt14.addActionListener(this);p1.add(bt5);p1.add(bt6);p1.add(bt7);p1.add(bt8);p1.add(bt9);p1.add(bt10);p1.add(bt11);p1.add(bt12);p1.add(bt13);p1.add(bt14);pa.add(p1,"West");JPanel p = new JPanel();p.setLayout(new GridLayout(5, 5));String buttons[] = {"tan","cot","sinh","cosh","tanh","7","8","9","/","sqrt","4","5","6","*","Mod","1","2","3","-","1/x" ,"0","+/-",".","+","="};JButton btn[]=new JButton[buttons.length];for (int i = 0; i < buttons.length; i++){addButton(p, buttons[i]);pa.add(p, "Center");}pa1.add("South",pa);this.getContentPane().add(pa1);}private void addButton(Container c, String s){ JButton b = new JButton(s);c.add(b);b.addActionListener(this);}//功能的实现public void actionPerformed(ActionEvent evt){String s = evt.getActionCommand();if(s.equals("CE")||s.equals("C")){text.setText("");}////////////////////else if(s.equals("+/-"))//单击"+/-"选择输入的运算数是正数还是负数{ double x;x=Double.parseDouble(text.getText().trim());text.setText(""+(-x));}elseif (s == "sqrt") {String s1 = text.getText();if (s1.charAt(0) == '-'&& clickable == true) {text.setText("负数不能开根号");clickable = false;}elsetext.setText(Double.toString(ng.Math.sqrt(Double.parseDouble(text.getText()))));}else if(s.equals("x²"))//单击了"x²"按钮{ double x;x=Double.parseDouble(text.getText().trim());text.setText(""+(x*x));}else if(s.equals("x³"))//单击了"x³"按钮{ double x;x=Double.parseDouble(text.getText().trim());text.setText(""+(x*x*x));}else if(s.equals("n!"))//单击了"n!"按钮{ double x;double y=1.0;x=Double.parseDouble(text.getText().trim());for(int i=1;i<=x;i++){y*=i;}text.setText(""+y);}else if(s.equals("%"))//单击了"%"按钮{ double x;x=Double.parseDouble(text.getText().trim());text.setText(""+(x*0.01));}else if(s.equals("π"))//单击了"π"按钮{ double x;x=Double.parseDouble(text.getText().trim());x=x*Math.PI;text.setText(""+x);}else if(s.equals("sin"))//单击了"sin"按钮{ double x;x=Double.parseDouble(text.getText().trim()); //获取文本框中内容功能除去字符串开头和末尾的空格或其他字符x=Math.sin(x*Math.PI/180);text.setText(""+x);}else if(s.equals("cos"))//单击了"cos"按钮{ double x;x=Double.parseDouble(text.getText().trim());x=Math.cos(x*Math.PI/180);text.setText(""+x);}else if(s.equals("tan"))//单击了"tan"按钮{ double x;x=Double.parseDouble(text.getText().trim());x=Math.tan(x*Math.PI/180);text.setText(""+x);}else if(s.equals("cot"))//单击了"sin"按钮{ double x;x=Double.parseDouble(text.getText().trim()); //获取文本框中内容功能除去字符串开头和末尾的空格或其他字符x=1/(Math.tan(x*Math.PI/180));text.setText(""+x);}else if(s.equals("sinh"))//单击了"sinh"按钮{ double x;x=Double.parseDouble(text.getText().trim());x=Math.asin(x)*(180/Math.PI);text.setText(""+x);}else if(s.equals("cosh"))//单击了"cosh"按钮{ double x;x=Double.parseDouble(text.getText().trim());x=Math.acos(x)*(180/Math.PI);text.setText(""+x);}else if(s.equals("tanh"))//单击了"tanh"按钮{ double x;x=Double.parseDouble(text.getText().trim());x=Math.atan(x)*(180/Math.PI);text.setText(""+x);}else if(s.equals("1/x"))//单击了"1/X"按钮{ double x;x=Double.parseDouble(text.getText().trim());if(x==0){text.setText("除数不能为零");}else{text.setText(""+(1/x));}//按下'+/-'按钮时处理if (s== "+/-" && clickable == true) {boolean isNumber = true;String s1 = text.getText();for (int i = 0; i < s.length(); i++)if (! (s1.charAt(i) >= '0' && s1.charAt(i) <= '9' || s1.charAt(i) == '.' ||s1.charAt(i) == '-')) {isNumber = false;break;}if (isNumber == true) {//如果当前字符串首字母有'-'号,代表现在是个负数,再按下时,则将首符号去掉if (s.charAt(0) == '-') {text.setText("");for (int i = 1; i < s1.length(); i++) {char a = s1.charAt(i);text.setText(text.getText() + a);}}//如果当前字符串第一个字符不是符号,则添加一个符号在首字母处elsetext.setText('-' + s);}}//计算器有关内存操作//'MC'的操作,将内存清0elseif (s == "MC" && clickable == true) {memoryd = memoryi = 0;textMemory.setText("");}//'MS'的操作,将当前文本框内容保存入内存,显示'M'elseif (s == "MS" && clickable == true) {boolean isDot = false;textMemory.setText(" M");for (int i = 0; i < text.getText().length(); i++)if ('.' == text.getText().charAt(i)) {isDot = true;break;}//如果是double,则存入memoryd(double存储器)if (isDot == true) {memoryd = Double.parseDouble(text.getText());memoryi = 0; //保证存储器中存放最新的值}//如果是int,则存入memoryi(int存储器)else {memoryi = Integer.parseInt(text.getText());memoryd = 0; //保证存储器中存放最新的值}}//'MR'的操作,将存储器中的信息输出elseif (s == "MR" && clickable == true) {if (memoryd != 0)text.setText(Double.toString(memoryd));if (memoryi != 0)text.setText(Integer.toString(memoryi));}//'M+'的功能,将当前文本框里的数据和存储器中数据相加后,再存入存储器elseif (s == "M+" && clickable == true) {boolean isDot = false;for (int i = 0; i < text.getText().length(); i++)if ('.' == text.getText().charAt(i)) {isDot = true;break;}if (memoryi != 0) { //存储中是一个int型数if (isDot == false) //被加数是一个int型数memoryi += Integer.parseInt(text.getText());else { //被加数是一个double型数,则将int存储器中数传入double存储器与当前数相加,int存储器清零memoryd = memoryi + Double.parseDouble(text.getText());memoryi = 0;}}elsememoryd += Double.parseDouble(text.getText());}}elseif ('0' <= s.charAt(0) && s.charAt(0) <= '9' || s.equals(".")){ // text.setText("");if (start)text.setText(s);else text.setText(text.getText() + s);start = false;}else{ if (start){ if (s.equals("-")){ text.setText(s); start = false; }else op = s;}else{double x=Double.parseDouble(text.getText());calculate(x);op = s;start = true;}}}public void calculate(double n){ if (op.equals("+")) arg += n;else if (op.equals("-")) arg -= n;else if (op.equals("*")) arg *= n;else if (op.equals("/")) arg /= n;else if (op.equals("Mod")) arg %= n;else if (op.equals("=")) arg = n;text.setText("" + arg);}private double arg = 0;private String op = "=";private boolean start = true;public void itemStateChanged(ItemEvent e){}public static void main(String args[]){JFrame frame=new JFrame();jisuanqi myMenu=new jisuanqi();myMenu.init();myMenu.setVisible(true);//设置可见}}。
JAVA编写的计算器源代码
JAVA编写的计算器源代码// Calculator.javaimport javax.swing.*; // 引入swing库import java.awt.*; // 引入awt库import java.awt.event.*; // 引入awt.event库public class Calculator extends JFrame implements ActionListener//定义按钮private JButton zero;private JButton one;private JButton two;private JButton three;private JButton four;private JButton five;private JButton six;private JButton seven;private JButton eight;private JButton nine;private JButton point;private JButton equal; private JButton plus; private JButton minus; private JButton multiply; private JButton divide; private JButton backspace; private JButton ac;private JButton ce;private JButton sqrt; private JButton sqr;private JButton plus_minus; private JButton delete; private JButton sin;private JButton cos;private JButton tan;private JButton log;private JButton nfactorial; private JButton cubic; private JButton coln;private JButton factorial;//定义文本框private JTextField resulttext;// 定义boolean变量boolean clrdisp = true; // 昵称确定是否清除计算器显示boolean isCalculate = false; // 是否可以执行计算// 定义String变量,用于存储操作符String optr;//定义存储第一个操作数double num1;//初始化构造函数public Calculato//设置布局setLayout(new BorderLayout();//创建面板JPanel northPanel = new JPanel(;JPanel centerPanel = new JPanel(;JPanel southPanel = new JPanel(;//设置面板布局northPanel.setLayout(new FlowLayout(); centerPanel.setLayout(new GridLayout(4, 5)); southPanel.setLayout(new FlowLayout();//设置计算器显示resulttext = new JTextField(28); northPanel.add(resulttext);resulttext.setEditable(false);//初始化按钮zero = new JButton("0");one = new JButton("1");two = new JButton("2");three = new JButton("3");four = new JButton("4");five = new JButton("5");six = new JButton("6");seven = new JButton("7");eight = new JButton("8");nine = new JButton("9");point = new JButton(".");equal = new JButton("=");plus = new JButton("+");minus = new JButton("-"); multiply = new JButton("*"); divide = new JButton("/"); backspace = new JButton("<-"); ac = new JButton("AC");ce = new JButton("CE");sqrt = new JButton("sqrt");sqr = new JButton("sqr");plus_minus = new JButton("+/-");。
eclipse实现简单计算器代码.
eclipse实现简单计算器代码.package Computer;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import java.util.LinkedList;import java.text.NumberFormat;public class Cacultor extends Frame implements ActionListener{/*** @param args*/NumberButton numberButton[];OperationButton operationButton[];Button 小数点按钮,正负号按钮,退格按钮,求倒数按钮,等号按钮,清零按钮;Panel panel;JTextField resultShow;String 运算符号[]={"+","-","*","/"};LinkedList 链表;boolean 是否按下等号=false;public Cacultor(){super("计算器");链表=new LinkedList();numberButton=new NumberButton[10];for(int i=0;i<=9;i++){numberButton[i]=new NumberButton(i);numberButton[i].addActionListener(this);}operationButton=new OperationButton[4];for(int i=0;i<4;i++){operationButton[i]=new OperationButton(运算符号[i]);operationButton[i].addActionListener(this);}小数点按钮=new Button(".");正负号按钮=new Button("+/-");等号按钮=new Button("=");求倒数按钮=new Button("1/x");退格按钮=new Button("退格");清零按钮=new Button("c");清零按钮.setForeground(Color.red);退格按钮.setForeground(Color.red);等号按钮.setForeground(Color.red);求倒数按钮.setForeground(Color.blue);正负号按钮.setForeground(Color.blue);小数点按钮.setForeground(Color.blue);退格按钮.addActionListener(this);清零按钮.addActionListener(this);等号按钮.addActionListener(this);小数点按钮.addActionListener(this);正负号按钮.addActionListener(this);求倒数按钮.addActionListener(this);resultShow=new JTextField(10);resultShow.setHorizontalAlignment(JTextField.RIGHT); resultShow.setForeground(Color.blue);resultShow.setFont(new Font("TimesRoman",Font.PLAIN,14)); resultShow.setBorder(newSoftBevelBorder(BevelBorder.LOWERED));resultShow.setBackground(Color.white);resultShow.setEditable(false);panel=new Panel();panel.setLayout(new GridLayout(4,5));panel.add(numberButton[1]);panel.add(numberButton[2]);panel.add(numberButton[3]);panel.add(operationButton[0]);panel.add(清零按钮);panel.add(numberButton[4]);panel.add(numberButton[5]);panel.add(numberButton[6]);panel.add(operationButton[1]);panel.add(退格按钮);panel.add(numberButton[7]);panel.add(numberButton[8]);panel.add(numberButton[9]);panel.add(operationButton[2]);panel.add(求倒数按钮);panel.add(numberButton[0]);panel.add(正负号按钮);panel.add(小数点按钮);panel.add(operationButton[3]);panel.add(等号按钮);add(panel,BorderLayout.CENTER);add(resultShow,BorderLayout.NORTH);addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){ System.exit(0);}});setVisible(true);setBounds(100,50,240,180);setResizable(false);validate();}//按钮事件的处理public void actionPerformed(ActionEvent e){if(e.getSource() instanceof NumberButton){NumberButton b=(NumberButton)e.getSource();if(链表.size()==0){int number=b.getNumber();链表.add(""+number);resultShow.setText(""+number);是否按下等号=false;}else if(链表.size()==1&&是否按下等号==false){ int number=b.getNumber();String num=(String)链表.getFirst();String s=num.concat(""+number);链表.set(0, s);resultShow.setText(s);}else if(链表.size()==1&&是否按下等号==true){int number=b.getNumber();链表.removeFirst();链表.add(""+number);是否按下等号=false;resultShow.setText(""+number);}else if(链表.size()==2){int number=b.getNumber();链表.add(""+number);resultShow.setText(""+number);}else if(链表.size()==3){int number=b.getNumber();String num=(String)链表.getLast();String s=num.concat(""+number);链表.set(2, s);resultShow.setText(s);}}else if(e.getSource()instanceof OperationButton){ OperationButton b=(OperationButton)e.getSource();if(链表.size()==1){String fuhao=b.get运算符号();链表.add(fuhao);}else if(链表.size()==2){String fuhao=b.get运算符号();链表.set(1, fuhao);}else if(链表.size()==3){String fuhao=b.get运算符号();String number1=(String)链表.getFirst();String number2=(String)链表.getLast();String 运算符号=(String)链表.get(1);try{double n2=Double.parseDouble(number2); double n=0;if(运算符号.equals("+")){n=n1+n2;}else if(运算符号.equals("-")){n=n1-n2;}else if(运算符号.equals("*")){n=n1*n2;}else if(运算符号.equals("/")){n=n1/n2;}链表.clear();链表.add(""+n);链表.add(fuhao);resultShow.setText(""+n);}catch(Exception ee){}}}else if(e.getSource()==等号按钮){是否按下等号=true;if(链表.size()==1&&链表.size()==2){ String num=(String)链表.getFirst(); resultShow.setText(""+num);}else if(链表.size()==3){String number1=(String)链表.getFirst(); String number2=(String)链表.getLast(); String 运算符号=(String)链表.get(1);try{double n2=Double.parseDouble(number2); double n=0;if(运算符号.equals("+")){n=n1+n2;}else if(运算符号.equals("-")){n=n1-n2;}else if(运算符号.equals("*")){n=n1*n2;}else if(运算符号.equals("/")){n=n1/n2;}resultShow.setText(""+n);链表.set(0, ""+n);链表.removeLast();链表.removeLast();}catch(Exception ee){}}}else if(e.getSource()==小数点按钮){if(链表.size()==0){是否按下等号=false;}else if(链表.size()==1){String dot=小数点按钮.getLabel();String num=(String)链表.getFirst();String s=null;if(num.indexOf(dot)==-1){s=num.concat(dot);链表.set(0, s);}else{s=num;}链表.set(0, s);resultShow.setText(s);}else if(链表.size()==3){String dot=小数点按钮.getLabel(); String num=(String)链表.getLast(); String s=null;if(num.indexOf(dot)==-1){s=num.concat(dot);链表.set(2, s);}else{s=num;}resultShow.setText(s);}}else if(e.getSource()==退格按钮){if(链表.size()==1){String num=(String)链表.getFirst();if(num.length()>=1){num=num.substring(0,num.length()-1); 链表.set(0, num);resultShow.setText(num);}else{链表.removeLast();resultShow.setText("0");}}else if(链表.size()==3){String num=(String)链表.getLast();if(num.length()>=1){num=num.substring(0,num.length()-1); 链表.set(2, num);resultShow.setText(num);}else{链表.removeLast();resultShow.setText("0");}}}else if(e.getSource()==正负号按钮){if(链表.size()==1){String number1=(String)链表.getFirst(); try{double d=Double.parseDouble(number1); d=-1*d;String str=String.valueOf(d);链表.set(0, str);resultShow.setText(str);}catch(Exception ee){}}else if(链表.size()==3){String number2=(String)链表.getLast();try{double d=Double.parseDouble(number2); d=-1*d;String str=String.valueOf(d);链表.set(2, str);resultShow.setText(str);}catch(Exception ee){}}}else if(e.getSource()==求倒数按钮){if(链表.size()==1||链表.size()==2){String number1=(String)链表.getFirst(); try{double d=Double.parseDouble(number1); d=1.0/d;String str=String.valueOf(d);链表.set(0, str);resultShow.setText(str);}catch(Exception ee){}}else if(链表.size()==3){String number2=(String)链表.getLast();try{double d=Double.parseDouble(number2); d=1.0/d;String str=String.valueOf(d);链表.set(0, str);resultShow.setText(str);}catch(Exception ee){}}}else if(e.getSource()==清零按钮){是否按下等号=false;resultShow.setText("0");链表.clear();}}public static void main(String[] args) {// TODO Auto-generated method stub new Cacultor();}}。
