【Java】使用swing實現簡易計算器
阿新 • • 發佈:2020-11-03
這個計算器簡單實現了加減乘除功能,平方、開根等額外功能可以自己再增加,每次輸出只能計算一個等式,即只能計算2個運算元。
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; public class Calculator { public static void main(String[] args) { CalcuFrame f = new CalcuFrame("【小氫計算器】"); } } class CalcuFrame extends JFrame implements java.awt.event.ActionListener{ JTextField input; JButton[] btn = new JButton[16]; JButton ACBtn = new JButton("清空"); String[] name = {"7","8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "+", "0", ".", "=", "-"}; public CalcuFrame(String str) { JPanel pNorth = new JPanel(); JPanel pCenter=new JPanel(); input = new JTextField("", 20); ACBtn.addActionListener(this); //將文字框與清空按鈕加入pNorth ACBtn.setForeground(Color.RED); pNorth.add(input); pNorth.add(ACBtn, BorderLayout.EAST); //將數字、操作符按鈕加入pCenter for(int i = 0; i < btn.length; i++) { btn[i] = new JButton(name[i]); btn[i].setForeground(Color.BLUE); if(i == 3 || i == 7 || i == 11 || i == 15) btn[i].setForeground(Color.GREEN); //btn[i].setBorder(new SoftBevelBorder(BevelBorder.RAISED)); pCenter.add(btn[i]); btn[i].addActionListener(this); //新增事件監聽器 } pCenter.setLayout(new GridLayout(4, 4)); //將pNorth、pCenter加入CalcuFrame add(pNorth, BorderLayout.NORTH); add(pCenter, BorderLayout.CENTER); //設定CalcuFrame的樣式 setTitle(str); setBounds(150,150,300,180); setVisible(true); validate(); setDefaultCloseOperation(DISPOSE_ON_CLOSE); } public void actionPerformed(ActionEvent e) { JButton b = (JButton)e.getSource(); //得到當前的按鈕物件 String s = b.getText(); //得到按鈕物件上的標識字元 if(s.equals("=")){ //如果是等號按鈕,解析字串並計算然後把結果顯示在文字輸入框 String res = parseString(input.getText()); if(res != null) { input.setText(res); } return; } if(b == ACBtn){ //如果按下了清除按鈕,則文字輸入框清除為空 input.setText(""); return; } //如果是其他按鈕(數字按鈕或運算子號按鈕)則把數字或運算子顯示在文字框中 String sTemp = input.getText(); sTemp = sTemp + b.getText(); input.setText(sTemp); } public String parseString(String s){ String op1,op2; double o1,o2,re = 0; int p=s.indexOf('+'); //查詢加號位置,如果找到(if(p!=-1))則取加號前面子串為運算元1,取加號後面子串為運算元2, // 轉換運算元1和運算元2為浮點型別,並進行加法運算,最後把結果返回 if(p == -1) p= s.indexOf('-');//查詢減號號位置,.....(處理類同與加號) if(p == -1) p= s.indexOf('*');//查詢乘號號位置,.....(處理類同與加號) if(p == -1) p= s.indexOf('/');//查詢除號號位置,.....(處理類同與加號) if(p == -1) return "輸入有誤!"; op1 = s.substring(0, p); op2 = s.substring(p+1); o1 = Double.parseDouble(op1); o2 = Double.parseDouble(op2); char c = s.charAt(p); if(c == '+') re = o1 + o2; else if(c == '-') re = o1 - o2; else if(c == '*') re = o1 * o2; else if(c == '/') { if(o2 == 0) return "輸入有誤!"; else re = o1 / o2; } return String.valueOf(re); } }