java元件——實現一個計算器
阿新 • • 發佈:2018-12-21
package com.tulun.dao; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Stack; import javax.swing.JApplet; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JTextField; /** * @ClassName Count * @Description 計算器 * @Author lzq * @Date 2018/12/21 11:02 * @Version 1.0 **/ public class Count extends JApplet implements ActionListener { private static final long serialVersionUID = 1L; private JTextField textField = new JTextField("請輸入"); String input = "";//輸入的 式子 /** * 覆寫Applet裡邊的init方法 */ public void init() { Container C = getContentPane(); JButton b[] = new JButton[16]; JPanel panel = new JPanel(); C.add(textField, BorderLayout.NORTH); C.add(panel, BorderLayout.CENTER); panel.setLayout(new GridLayout(4, 4, 5, 5)); String name[] = {"7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", "0", "C", "=", "/"};//設定 按鈕 //新增按鈕 for (int i = 0; i < 16; i++) { b[i] = new JButton(name[i]); b[i].setBackground(new Color(192, 192, 192)); b[i].setForeground(Color.BLUE);//數字鍵 設定為 藍顏色 if (i % 4 == 3) { b[i].setForeground(Color.RED); } b[i].setFont(new Font("宋體", Font.PLAIN, 16));//設定字型格式 panel.add(b[i]); b[i].addActionListener(this); } b[13].setForeground(Color.RED);//非數字鍵,即運算鍵設定為紅顏色 b[13].setForeground(Color.RED); } /** * 處理按鈕單擊方法 * @param e */ @Override public void actionPerformed(ActionEvent e) { int cnt = 0; String actionCommand = e.getActionCommand(); if (actionCommand.equals("+") || actionCommand.equals("-") || actionCommand.equals("*") || actionCommand.equals("/")) { input += " " + actionCommand + " ";//設定輸入,把輸入的樣式改成 需要的樣子 } else if (actionCommand.equals("C")) { input = ""; } else if (actionCommand.equals("=")) {//當監聽到等號時,則處理 input input += "=" + compute(input); textField.setText(input); input = ""; cnt = 1; } else { input += actionCommand;//數字為了避免多位數的輸入 不需要加空格 } if (cnt == 0) { textField.setText(input); } } /** * 計算 * @param input * @return */ private String compute(String input) { String str[]; str = input.split(" "); Stack<Double> s = new Stack<Double>(); double m = Double.parseDouble(str[0]); s.push(m); for (int i = 1; i < str.length; i++) { if (i % 2 == 1) { if (str[i].compareTo("+") == 0) { double help = Double.parseDouble(str[i + 1]); s.push(help); } if (str[i].compareTo("-") == 0) { double help = Double.parseDouble(str[i + 1]); s.push(-help); } if (str[i].compareTo("*") == 0) { double help = Double.parseDouble(str[i + 1]); double ans = s.peek();//取出棧頂元素 s.pop();//消棧 ans *= help; s.push(ans); } if (str[i].compareTo("/") == 0) { double help = Double.parseDouble(str[i + 1]); double ans = s.peek(); s.pop(); ans /= help; s.push(ans); } } } double ans = 0d; while(!s.isEmpty()){ ans+=s.peek(); s.pop(); } String result = String.valueOf(ans); return result; } }
package com.tulun.main; import com.tulun.dao.Count; import javax.swing.*; import java.awt.*; /** * @ClassName TestDemo5 * @Description 計算器測試類 * @Author lzq * @Date 2018/12/21 11:11 * @Version 1.0 **/ public class TestDemo5 { public static void main(String args[]){ JFrame frame = new JFrame("Count"); Count applet = new Count(); frame.getContentPane().add(applet, BorderLayout.CENTER); applet.init();//applet的init方法 applet.start();//執行緒開始 frame.setSize(350, 400);//設定視窗大小 frame.setVisible(true);//設定視窗可見 } }
執行結果: