1、加减乘除操作
public class MyMath { public static final int DEFAULT_SCALE = 20; public static double add(double num1, double num2) { BigDecimal first = getBigDecimal(num1); BigDecimal second = getBigDecimal(num2); return first.add(second).doubleValue(); } public static double substract(double num1, double num2) { BigDecimal first = getBigDecimal(num1); BigDecimal second = getBigDecimal(num2); return first.subtract(second).doubleValue(); } public static double multiply(double num1, double num2) { BigDecimal first = getBigDecimal(num1); BigDecimal second = getBigDecimal(num2); return first.multiply(second).doubleValue(); } public static double divide(double num1, double num2) { BigDecimal first = getBigDecimal(num1); BigDecimal second = getBigDecimal(num2); return first.divide(second,DEFAULT_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue(); } private static BigDecimal getBigDecimal(double num) { return new BigDecimal(num); } }
2、UI
public class CalFrame extends JFrame { /** * */ private static final long serialVersionUID = 1L; private TextField textField; private final int Frame_Width = 360; private final int Frame_Height = 250; private CalService service = new CalService(); private String[] mOpStrings = {"MC","MR","MS","M+"}; private String[] nOp = { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" }; private String[] rOp = { "Back", "CE", "C" }; public CalFrame(){ super(); initialize(); } private void initialize() { this.setTitle("我的计算器"); this.setResizable(false); JPanel panel = new JPanel(); textField = new TextField("0"); textField.setBackground(Color.white); textField.setEditable(false); panel.setLayout(new BorderLayout(10, 1)); panel.add(textField, BorderLayout.NORTH); panel.setPreferredSize(new DimensionUIResource(Frame_Width, Frame_Height)); JPanel panel1 = new JPanel(); panel1.setLayout(new GridLayout(5, 1, 0, 5)); JButton[] mButton = new JButton[mOpStrings.length]; for (int i = 0; i < this.mOpStrings.length; i++) { JButton b = new JButton(this.mOpStrings[i]); b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub String cmdString = arg0.getActionCommand(); String result = null; try { result = service.callMethod(cmdString, textField.getText()); } catch (Exception e) { // TODO: handle exception System.out.println(e.getMessage()); } if (cmdString.indexOf("MC") == 0) { } if (result != null) { textField.setText(result); } } }); b.setBackground(Color.red); mButton[i] = b; } for (JButton b : mButton) { panel1.add(b); } ///////////////////////////////////////////////////////// Panel panel2 = new Panel(); panel2.setLayout(new BorderLayout(1,5)); Panel panel21 = new Panel(); JButton[] result = new JButton[rOp.length]; for (int i = 0; i < this.rOp.length; i++) { JButton b = new JButton(this.rOp[i]); b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub } }); b.setBackground(Color.red); result[i] = b; } panel21.setLayout(new GridLayout(1,3,3,3)); for (JButton button : result) { panel21.add(button); } Panel panel22 = new Panel(); panel22.setLayout(new GridLayout(4,5,3,5)); JButton[] result2 = new JButton[nOp.length]; String[] redButton = { "/", "*", "-", "+", "=" }; for (int i = 0; i < this.nOp.length; i++) { JButton b2 = new JButton(this.nOp[i]); b2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub } }); Arrays.sort(redButton); if (Arrays.binarySearch(redButton, nOp[i]) >= 0) { b2.setForeground(Color.red); } else { b2.setForeground(Color.blue); } result2[i] = b2; } for (JButton button : result2) { panel22.add(button); } panel2.add(panel21, BorderLayout.NORTH); panel2.add(panel22,BorderLayout.CENTER); panel.add(panel1, BorderLayout.WEST); panel.add(panel2, BorderLayout.CENTER); this.add(panel); } }
3、业务类
public class CalService { private String firstNum = null; private String secondNum = null; private String numString = "0123456789."; private String opString = "+-*/"; public String callMethod(String cmd, String text)throws Exception { if (cmd.equals("C")) { return clearAll(); }else if (cmd.equals("CE")) { return clear(text); } else if (cmd.equals("Back")) { return backSpace(text); } else if (numString.indexOf(cmd) != -1) { return catNum(cmd, text); } else if (opString.indexOf(cmd) != -1) { return setOp(cmd, text); } else if (cmd.equals("=")) { return cal(text, false); } else if (cmd.equals("+/-")) { return setNegative(text); } else if (cmd.equals("1/x")) { return setReciprocal(text); } else if (cmd.equals("sqrt")) { return sqrt(text); } else if (cmd.equals("%")) { return cal(text, true); } else { return mCmd(cmd, text); } } private String backSpace(String text) { // TODO Auto-generated method stub return null; } private String catNum(String cmd, String text) { // TODO Auto-generated method stub return null; } private String setOp(String cmd, String text) { // TODO Auto-generated method stub return null; } private String setNegative(String text) { // TODO Auto-generated method stub return null; } private String setReciprocal(String text) { // TODO Auto-generated method stub return null; } private String sqrt(String text) { // TODO Auto-generated method stub return null; } private String cal(String text, boolean b) { // TODO Auto-generated method stub return null; } private String mCmd(String cmd, String text) { // TODO Auto-generated method stub return null; } private String clear(String text) { // TODO Auto-generated method stub return null; } private String clearAll() { // TODO Auto-generated method stub this.firstNum = "0"; this.secondNum = null; return this.firstNum; } }
4、Main类
public static void main(String[] args) { // TODO Auto-generated method stub CalFrame frame = new CalFrame(); frame.pack(); frame.setVisible(true); frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); }