CalculatorMainClass.java
public class CalculatorMainClass { public static void main(String args[]) { CalculatorFrame Calculator=new CalculatorFrame(); Calculator.setBounds(0,0,360,300); Calculator.setVisible(true); } }CalculatorFrame.java
import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import java.awt.Font; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; public class CalculatorFrame extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; JButton CE=new JButton("CE"); JTextField TextField=new JTextField(); String[] str={"7","8","9","/","4","5","6","*","1","2","3","-",".","0","=","+"}; JButton[] Buttons=new JButton[str.length]; StringBuffer strBuffer=new StringBuffer(); public CalculatorFrame(){ super("计算器-屠柯"); JPanel Panel=new JPanel(new BorderLayout()); TextField.setFont(new Font("宋体", Font.PLAIN, 40)); TextField.setEditable(false); TextField.setHorizontalAlignment(JTextField.RIGHT);//设置水平对其方式为右侧 CE.setFont(new Font("宋体", Font.BOLD, 20)); CE.setActionCommand("clear"); CE.addActionListener(this); Panel.add("Center",TextField); Panel.add("East",CE); //把按钮加入画板 JPanel Panel1 = new JPanel(new GridLayout(4, 4)); for (int i = 0; i < str.length; i++) { Buttons[i] = new JButton(str[i]); Buttons[i].setFont(new Font("宋体", Font.BOLD, 20)); Panel1.add(Buttons[i]); } //每个按钮设置监听器 for(int i=0;i<str.length;i++){ Buttons[i].addActionListener(this); if(Buttons[i].getText().equals("=")){ Buttons[i].setActionCommand("equal"); } else { Buttons[i].setActionCommand("common"); } } getContentPane().setLayout(new BorderLayout()); getContentPane().add("North", Panel); getContentPane().add("Center", Panel1); } @Override public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("common")){ JButton b=(JButton)e.getSource(); strBuffer.append(b.getText()); TextField.setText(strBuffer.toString()); TextField.repaint();//刷新界面 } else if(e.getActionCommand().equals("equal")){ DecimalFormat df = new DecimalFormat(",##0.00"); String s=df.format(ComputerNum(strBuffer.toString()));//将sum保留两位小数 TextField.setText(s); strBuffer.delete(0,strBuffer.length());//strBuffer清空 TextField.repaint(); } else if(e.getActionCommand().equals("clear")){ strBuffer.delete(0,strBuffer.length());//strBuffer清空 TextField.setText("0"); } } //计算输入值 public Double ComputerNum(String text){ // 计算内容按符号分割 List<String> numList = new ArrayList<String>(); int splitIndex = 0; for(int i=0;i<text.length();i++){ char c = text.charAt(i); if(c == '+'||c == '-'||c=='*'||c=='/'){ numList.add(text.substring(splitIndex, i)); numList.add(c+""); splitIndex = i+1; } } // 因为使用符号做判断,增加前一位和符号,所以最后一位数字不会在循环里处理 numList.add(text.substring(splitIndex, text.length())); /* System.out.println("====分割后===="); for(int i=0;i<numList.size();i++){ System.out.println(i + " -> " + numList.get(i)); } */ // 先做乘除计算 List<String> list = new ArrayList<String>(); Double temp = null; // 用于做乘除计算临时变量 for(int i=1;i<numList.size();i+=2){ // 这里只循环运算符号 if("+".equals(numList.get(i))||"-".equals(numList.get(i))){ if(null != temp){ // 存在临时变量,说明前面进行过乘除计算 list.add(temp.toString()); temp = null; } else { list.add(numList.get(i-1)); } list.add(numList.get(i)); // 把符号加进去 if(i==numList.size()-2) { // 处理到最后时遇到直接处理 list.add(numList.get(i+1)); } }else if("*".equals(numList.get(i))){ if(null == temp){ temp = Double.parseDouble(numList.get(i-1)) * Double.parseDouble(numList.get(i+1)); }else{ temp = temp * Integer.parseInt(numList.get(i+1)); } if(i==numList.size()-2) { // 处理到最后时遇到直接处理 list.add(temp.toString()); temp = null; } }else if("/".equals(numList.get(i))){ if(null == temp){ temp = Double.parseDouble(numList.get(i-1)) /Double.parseDouble(numList.get(i+1)); }else{ temp = temp / Double.parseDouble(numList.get(i+1)); } if(i==numList.size()-2) { // 处理到最后时遇到直接处理 list.add(temp.toString()); temp = null; } } } /*System.out.println("====乘除后===="); for(int i=0;i<list.size();i++){ System.out.println(i + " -> " + list.get(i)); } */ // 再做加减计算 Double sum = Double.parseDouble(list.get(0)); // 第一位不会在循环里处理 for(int i=1;i<list.size();i+=2){ // 这里只循环运算符号 if("+".equals(list.get(i))){ sum += Integer.parseInt(list.get(i+1)); }else if("-".equals(list.get(i))){ sum -= Integer.parseInt(list.get(i+1)); } } return sum; } }