我自己写的计算器(有源代码)

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class Awt {
 
 public static void addButton(JButton[] button,JPanel panel){//把按钮添加到面板中
    for(int i=0;i<button.length;i++){
     panel.add(button[i]);
    }
   }
  public static void createButton(JButton[] button,String s[]){//创建指定标题的按钮
    for(int i=0;i<s.length;i++){
     button[i]=new JButton(""+s[i]);
    }
   }
  public static void SetButtonColor(JButton[] button){//设置面板上字体的颜色
    for(int i=0;i<button.length;i++){
     button[i].setForeground(Color.BLUE);
    }
   }
 public static boolean contain1(String s) {//判断字符串中是否含有"+"
  for (int i = 1; i < s.length(); i++) {
   if (s.charAt(i) == '+') {
    return true;
   }
  }
  return false;
 }

 public static boolean contain2(String s) {//判断字符串中是否含有"-"
  for (int i = 1; i < s.length(); i++) {
   if (s.charAt(i) == '-') {
    return true;
   }
  }
  return false;
 }

 public static boolean contain3(String s) {//判断字符串中是否含有"*"
  for (int i = 1; i < s.length(); i++) {
   if (s.charAt(i) == '*') {
    return true;
   }
  }
  return false;
 }

 public static boolean contain4(String s) {//判断字符串中是否含有"/"
  for (int i = 1; i < s.length(); i++) {
   if (s.charAt(i) == '/') {
    return true;
   }
  }
  return false;
 }

 public static void main(String[] args) {
  final JFrame frame = new JFrame("计算器");
  frame.setVisible(true);
  Toolkit toolkit = Toolkit.getDefaultToolkit();
  Dimension di = toolkit.getScreenSize();
  frame.setLocation((di.width - frame.WIDTH) / 2,
    (di.height - frame.HEIGHT) / 2);

  JMenuBar mb = new JMenuBar();
  JMenu m1 = new JMenu("计算器C");
  JMenuItem item11 = new JMenuItem("退出(Q)        Ctrl+Q");
  item11.addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent e) {
    System.exit(0);

   }

  });
  m1.add(item11);
  JMenu m2 = new JMenu("编辑E");
  JMenuItem item1 = new JMenuItem("复制(C)        Ctrl+C");
  JMenuItem item2 = new JMenuItem("粘贴(V)       Ctrl+V");
  m2.add(item1);
  m2.add(item2);
  JMenu m3 = new JMenu("查看V");
  JMenuItem item3 = new JMenuItem("基本(B)        Ctrl+B");
  JMenuItem item4 = new JMenuItem("高级 (A)      Ctrl+A");
  JMenuItem item5 = new JMenuItem("金融(F)        Ctrl+F");
  JMenuItem item6 = new JMenuItem("科学 (S)      Ctrl+S");
  JMenuItem item7 = new JMenuItem("显示千分位符(H)      Ctrl+K");
  m3.add(item3);
  m3.add(item4);
  m3.add(item5);
  m3.add(item6);
  m3.add(item7);
  JMenu m4 = new JMenu("帮助H");
  JMenuItem item9 = new JMenuItem("帮助(H)        F1");
  JMenuItem item10 = new JMenuItem("关于 (A) ");
  m4.add(item9);
  m4.add(item10);
  mb.add(m1);
  mb.add(m2);
  mb.add(m3);
  mb.add(m4);
  frame.setJMenuBar(mb);

  final JTextField tf = new JTextField("0");
  tf.setBounds(115, 30, 120, 22);
  tf.setHorizontalAlignment(JTextField.RIGHT);// 设置文本框中的文字为右对齐

  JPanel p1 = new JPanel();
  frame.add(tf, BorderLayout.NORTH);
  JPanel p2 = new JPanel();
  p2.setLayout(new GridLayout(5, 4, 5, 5));
  
  String s[]={"sqrt","Backspace","CE","C","7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"};
  final JButton[] button=new JButton[20];
  
      createButton(button,s);//创建20个按钮
  SetButtonColor(button);//设置20个按钮的颜色
  addButton(button,p2);//把20个按钮添加到面板中
  
  frame.add(p2, BorderLayout.CENTER);
  frame.setResizable(false);// 设置窗体为不可更改大小的
  frame.pack();// 根据组件动态设置窗体大小
  
  
  button[0].addActionListener(new ActionListener() {// 实现平方根按钮单击事件
     public void actionPerformed(ActionEvent arg0) {
      try {
       String content = tf.getText();
       Double d = Double.parseDouble(content);
       if (d < 0) {
        JOptionPane.showMessageDialog(frame, "负数不能开平方","格式错误的表达式", JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
       }
       double result = Math.sqrt(d);
       tf.setText("" + result);
      } catch (Exception e) {
       JOptionPane.showMessageDialog(frame, "算式中只能输入数字","格式错误的表达式", JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
      }
     }

    });
  button[1].addActionListener(new ActionListener() {// 实现退格按钮的监听事件
     public void actionPerformed(ActionEvent arg0) {
      String content = tf.getText();
      String newcontent = content.substring(0, content
        .length() - 1);
      tf.setText(newcontent);
     }

    });

  button[2].addActionListener(new ActionListener() {// 实现清空按钮事件

     public void actionPerformed(ActionEvent arg0) {
      tf.setText("");
     }

    });
  button[3].addActionListener(new ActionListener() {// 实现清空按钮事件

     public void actionPerformed(ActionEvent arg0) {
      tf.setText("");
     }

    });
  
    for(int i=4;i<=17;i++){
            button[i].addActionListener(new buttonAction(button[i],tf) );
          }
  button[18].addActionListener(new ActionListener() {// 实现=按钮的监听事件

     public void actionPerformed(ActionEvent arg0) {
      String s = tf.getText();
      if (Awt.contain1(s)) {
       String str[] = s.split("\\+");
       try {
        if(str[0].length()>1&&str[0].charAt(0)=='0'){
         JOptionPane.showMessageDialog(frame,"数字不能以0开头", "格式错误的表达式",JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
        }
        double result1 = Double.parseDouble(str[0])
          + Double.parseDouble(str[1]);
        tf.setText("" + result1);
       } catch (java.lang.NumberFormatException e) {
        JOptionPane.showMessageDialog(frame,"算式中只能输入数字", "格式错误的表达式", JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
       }

      }
      if (Awt.contain2(s)) {
       try {
        if (s.charAt(0) == '-') {
         String news = s.substring(1, s.length());
         String str[] = news.split("\\-");
         double result2 = -(Double
           .parseDouble(str[0]) + Double
           .parseDouble(str[1]));
         tf.setText("" + result2);
        }

        else {
         String str[] = s.split("\\-");
         if(str[0].length()>1&&str[0].charAt(0)=='0'){
          JOptionPane.showMessageDialog(frame,"数字不能以0开头", "格式错误的表达式", JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
         }
         double result2 = Double.parseDouble(str[0])
           - Double.parseDouble(str[1]);
         tf.setText("" + result2);
        }
       } catch (java.lang.NumberFormatException e) {
        JOptionPane.showMessageDialog(frame,"算式中只能输入数字", "格式错误的表达式",JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
       }

      }
      if (Awt.contain3(s)) {
       String str[] = s.split("\\*");
       try {
        if(str[0].length()>1&&str[0].charAt(0)=='0'){
         JOptionPane.showMessageDialog(frame,"数字不能以0开头", "格式错误的表达式",JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
        }
        double result3 = Double.parseDouble(str[0])
          * Double.parseDouble(str[1]);
        tf.setText("" + result3);
       } catch (java.lang.NumberFormatException e) {
        JOptionPane.showMessageDialog(frame, "算式中只能输入数字", "格式错误的表达式",JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
       }

      }
      if (Awt.contain4(s)) {
       String str[] = s.split("\\/");
       try {
        if(str[0].length()>1&&str[0].charAt(0)=='0'){
            JOptionPane.showMessageDialog(frame,"数字不能以0开头", "格式错误的表达式",JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
        }
        if (str[1].equals("0")) {
         JOptionPane.showMessageDialog(frame,"******除数不能为0******", "格式错误的表达式",JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
        }
        double result4 = Double.parseDouble(str[0])
          / Double.parseDouble(str[1]);
        tf.setText("" + result4);
       } catch (java.lang.NumberFormatException e) {
        JOptionPane.showMessageDialog(frame,
          "算式中只能输入数字", "格式错误的表达式", JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
       }

      }

     }

    });
   button[19].addActionListener(new buttonAction(button[19],tf) );
  
 }
 
}
class buttonAction implements ActionListener{
 private JButton button=null;
 private JTextField tf=null;
 public buttonAction(JButton button,JTextField tf){
  this.button=button;
  this.tf=tf;
 }
 public void actionPerformed(ActionEvent e) {
      tf.setText(tf.getText()+button.getActionCommand());
  
 }
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值