使用Java实现的简单的计算器
生活随笔
收集整理的這篇文章主要介紹了
使用Java实现的简单的计算器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
package calculate;
/*** @author Wayne;* @time 2014年7月14日;* @project java計算器2.0;*/import java.awt.*;
import java.awt.event.*;
import java.text.DecimalFormat;import javax.swing.*;
import javax.swing.JOptionPane;
import javax.script.*;public class Calcul extends JFrame implements ActionListener,KeyListener
{private static final long serialVersionUID = 6256855493544342895L;//一些全局初始化JPanel buttonPanel = new JPanel(new GridLayout(5,4,3,3));//定義5*4網格,橫向豎向間距為3pxJTextField dataspace = new JTextField("");//顯示輸入的文本JTextField message = new JTextField("就緒");//標題用戶顯示提示信息String str[] = {"清除(C)","←","(",")","7","8","9","÷","4","5","6","×","1","2","3","-",".","0","等于(R)","+"};//按鈕文字private JButton btn[] = new JButton[str.length];//新建按鈕//字體和顏色Font font = new Font("微軟雅黑",Font.BOLD,22);//字體初始化Color wordcolor = new Color(255,255,255);//字體設置為白色Color textboxcolor = new Color(124,97,76);//消息框顏色為灰色Color textboxcolor1 = new Color(125,125,125);//文本框顏色為灰色public Calcul(){//一些初始化setTitle("計算器");setSize(WIDTH,HEIGHT);setResizable(false);setIconImage(Toolkit.getDefaultToolkit().getImage("icon.png"));//增加按鈕并設置監聽顏色等for(int i = 0;i<str.length;i++){btn[i] = new JButton(str[i]);btn[i].setFont(font);btn[i].addActionListener(this);btn[i].addKeyListener(this);// if((i>3 && i<7 ) || (i>7 && i<11) || ( i>11 && i<15) || i == 17)btn[i].setBackground(new Color(104,152,104));//else// btn[i].setBackground(new Color(99,154,157));
btn[i].setForeground(wordcolor);buttonPanel.add(btn[i]); }btn[0].setBackground(new Color(204,88,56));btn[7].setBackground(new Color(67,160,193));btn[11].setBackground(new Color(67,160,193));btn[15].setBackground(new Color(67,160,193));btn[19].setBackground(new Color(67,160,193));message.addKeyListener(this);//增加文本面板
JPanel textPanel = new JPanel(new GridLayout(2,1));//將文本框加入到文本面板中//提示框
message.setFont(font);message.setPreferredSize(new Dimension(30,50));message.setBackground(textboxcolor);message.setForeground(wordcolor);message.setEditable(false);textPanel.add(message);//緩沖區
dataspace.setFont(font);dataspace.setPreferredSize(new Dimension(30,60));dataspace.setBackground(textboxcolor1);dataspace.setForeground(wordcolor);dataspace.setEditable(false);textPanel.add(dataspace);//將組件加入到容器中Container contentPane = getContentPane();contentPane.add(buttonPanel,BorderLayout.CENTER);contentPane.add(textPanel,BorderLayout.NORTH);}public static final int WIDTH = 500;public static final int HEIGHT = 500;public static void main(String[] args){Calcul frame = new Calcul();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();frame.setLocation((dim.width - 350)/2,(dim.height - 500)/2);frame.setVisible(true);}//判斷輸入是否為+-*/.的函數public boolean NotSymbol(String str){char strc = str.charAt(0);if(strc == '*' || strc == '/' || strc == '+' || strc == '-' || strc == '.'){return false;}else { return true;}}//判斷前一個是否為+-*/.的函數public boolean PreNotSym(String str){String pre = str.substring(str.length()-1, str.length());if(NotSymbol(pre))return true;else return false;}//追加函數public String addnum(String add){String addbefore=dataspace.getText().trim();String addafter = null;message.setText("輸入的為:");if(addbefore.length() == 0 ){if(NotSymbol(add))addafter=addbefore+add;else if( !NotSymbol(add))addafter = addbefore;}else if(addbefore.length() >= 2 ){if(PreNotSym(addbefore)){addafter=addbefore+add;}else {if(NotSymbol(add))addafter = addbefore + add;else if( !NotSymbol(add))addafter = addbefore;}}else if(addbefore.length() == 1){addafter = addbefore + add;}return addafter;}@Overridepublic void actionPerformed(ActionEvent e){//清空if (e.getSource() == btn[0] ){message.setText("就緒");dataspace.setText("");}//退格else if (e.getSource() == btn[1]){message.setText("就緒");String data = dataspace.getText().trim();if(data.length()>0){if(data.charAt(0) != '-'){if(data.length() >1){if(data.charAt(data.length() - 2) == '.'){data = data.substring(0,data.length() -1);dataspace.setText(data);}data = data.substring(0,data.length() - 1);dataspace.setText(data);} else if(data.length() == 1){dataspace.setText("");}}else if(data.charAt(0) == '-'){if(data.length() >2){if(data.charAt(data.length() - 2) == '.'){data = data.substring(0,data.length() -1);dataspace.setText(data);}data = data.substring(0,data.length() - 1);dataspace.setText(data);} else if(data.length() == 2){dataspace.setText("0");}}else if(data == "0"){dataspace.setText("");}}else{}}//左括號else if(e.getSource() == btn[2]){String key = "(";dataspace.setText(addnum(key));}//右括號else if(e.getSource() == btn[3]){String key = ")";dataspace.setText(addnum(key));} //等號else if(e.getSource() == btn[18]){message.setText("計算得到的結果為:");ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine se = sem.getEngineByName("js");try{ int leng = dataspace.getText().length();if(leng==0){message.setText("你好像沒輸入數據哦~!"); }else{ DecimalFormat df = new DecimalFormat("#.##"); //設置數據格式 Object result = se.eval(dataspace.getText());double value = Double.parseDouble(df.format(result)); String valuestr = String.valueOf(value);dataspace.setText(valuestr);}}catch (ScriptException evt){message.setText("表達式似乎有錯呢!請重新編輯"); } catch(NumberFormatException evt){message.setText("除數不能為0哦,請重新編輯");}}//加點else if(e.getSource() == btn[16]){String key = ".";dataspace.setText(addnum(key));}//加號else if(e.getSource() == btn[19]){String key = "+";dataspace.setText(addnum(key));}//減號else if(e.getSource() == btn[15]){String key = "-";dataspace.setText(addnum(key));}//乘號else if(e.getSource() == btn[11]){String key = "*";dataspace.setText(addnum(key));}//除號else if(e.getSource() == btn[7]){String key = "/";dataspace.setText(addnum(key));}//數字7else if(e.getSource() == btn[4]){String key = "7";dataspace.setText(addnum(key));}//數字8else if(e.getSource() == btn[5]){String key = "8";dataspace.setText(addnum(key));}//數字9else if(e.getSource() == btn[6]){String key = "9";dataspace.setText(addnum(key));}//數字4else if(e.getSource() == btn[8]){String key = "4";dataspace.setText(addnum(key));}//數字5else if(e.getSource() == btn[9]){String key = "5";dataspace.setText(addnum(key));}//數字6else if(e.getSource() == btn[10]){String key = "6";dataspace.setText(addnum(key));}//數字1else if(e.getSource() == btn[12]){String key = "1";dataspace.setText(addnum(key));}//數字2else if(e.getSource() == btn[13]){String key = "2";dataspace.setText(addnum(key));}//數字3else if(e.getSource() == btn[14]){String key = "3";dataspace.setText(addnum(key));}//數字0else if(e.getSource() == btn[17]){String key = "0";dataspace.setText(addnum(key));}}@Overridepublic void keyTyped(KeyEvent e) {// TODO 自動生成的方法存根
}@Override//按下按鈕public void keyReleased(KeyEvent e) {int keycode = e.getKeyCode();//退出if(keycode == 81){int i = JOptionPane.showConfirmDialog(null, "是否退出?","提示:", JOptionPane.YES_NO_OPTION);if(i == JOptionPane.OK_OPTION){System.exit(0);}else{ }}//清空if (keycode == 67 ){message.setText("就緒");dataspace.setText("");}//點else if(keycode == 110){String key = ".";dataspace.setText(addnum(key));}//加號else if(keycode == 107){String key = "+";dataspace.setText(addnum(key));}//減號else if(keycode == 109){String key = "-";dataspace.setText(addnum(key));}//乘號else if(keycode == 106){String key = "*";dataspace.setText(addnum(key));}//除號else if(keycode == 111){String key = "/";dataspace.setText(addnum(key));}//數字7else if(keycode == 103 || keycode == 55){String key = "7";dataspace.setText(addnum(key));}//數字8else if(keycode == 104 || keycode == 56){String key = "8";dataspace.setText(addnum(key));}//數字9else if(keycode == 105 || (keycode == 57 && !e.isShiftDown())){String key = "9";dataspace.setText(addnum(key));}//數字4else if(keycode == 100 || keycode == 52){String key = "4";dataspace.setText(addnum(key));}//數字5else if(keycode == 101 || keycode == 53){String key = "5";dataspace.setText(addnum(key));}//數字6else if(keycode == 102 || keycode == 54){String key = "6";dataspace.setText(addnum(key));}//數字1else if(keycode == 97 || keycode == 49){String key = "1";dataspace.setText(addnum(key));}//數字2else if(keycode == 98 || keycode == 50){String key = "2";dataspace.setText(addnum(key));}//數字3else if(keycode == 99 || keycode == 51){String key = "3";dataspace.setText(addnum(key));}//數字0else if(keycode == 96 || (keycode == 48 && !e.isShiftDown())){String key = "0";dataspace.setText(addnum(key));}//按下Relse if(keycode == 82){message.setText("計算得到的結果為:");ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine se = sem.getEngineByName("js");try{ int leng = dataspace.getText().length();if(leng==0){message.setText("你好像沒輸入數據哦!"); }else{ DecimalFormat df = new DecimalFormat("#.##"); //設置數據格式 Object result = se.eval(dataspace.getText());double value = Double.parseDouble(df.format(result)); String valuestr = String.valueOf(value);dataspace.setText(valuestr);}}catch (ScriptException evt){message.setText("表達式似乎有錯呢!請重新編輯"); }catch(NumberFormatException evt){message.setText("除數不能為0哦,請重新編輯");}}//按下Backspaceelse if (keycode == 8){message.setText("就緒");String data = dataspace.getText().trim();if(data.length()>0){if(data.charAt(0) != '-'){if(data.length() >1){if(data.charAt(data.length() - 2) == '.'){data = data.substring(0,data.length() -1);dataspace.setText(data);}data = data.substring(0,data.length() - 1);dataspace.setText(data);} else if(data.length() == 1){dataspace.setText("");}}else if(data.charAt(0) == '-'){if(data.length() >2){if(data.charAt(data.length() - 2) == '.'){data = data.substring(0,data.length() -1);dataspace.setText(data);}data = data.substring(0,data.length() - 1);dataspace.setText(data);} else if(data.length() == 2){dataspace.setText("0");}}else if(data == "0"){dataspace.setText("");}}else{}}//左括號else if(keycode == 57 && e.isShiftDown()){String key = "(";dataspace.setText(addnum(key));}//右括號else if(keycode == 48 && e.isShiftDown()){String key = ")";dataspace.setText(addnum(key));}}@Overridepublic void keyPressed(KeyEvent e) {// TODO 自動生成的方法存根
}
}
小學期自己寫的一個程序,功能簡單。沒有bug
轉載于:https://www.cnblogs.com/waynehfut/p/3869197.html
總結
以上是生活随笔為你收集整理的使用Java实现的简单的计算器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OnClientClick和OnClic
- 下一篇: padding与margin的差别