JAVA写个简易的计算器。只要加减乘除四个运算。三个文本框分别为输入的两个字符和结果。四个按钮加减乘除

2022-04-02 社会 97阅读

 

 

 

 

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;

 

public class GS extends JFrame implements ActionListener {

 private String[] str = { "7", "8", "9", "/", "sqrt",

    "4", "5", "6", "*", "%",

    "1", "2", "3", "-", "1/x",

    "0", "+/-", ".", "+", "=" };

 private JTextField tf_out;

 private JButton jb_bk, jb_ce, jb_c;

 private JButton[] jb_key;

 private char ch = '#';

 private boolean can = false;

 private double num1;

 public void creatGUI() {

 

 tf_out = new JTextField();

 tf_out.setHorizontalAlignment(JTextField.RIGHT);

 tf_out.setColumns(18);

 tf_out.setEditable(false); // 设置输出不可编辑

 tf_out.setText("0");

 this.add(tf_out, BorderLayout.NORTH);

 JPanel p = new JPanel(new BorderLayout(3, 8));

 JPanel p1 = new JPanel(new GridLayout(1, 3, 3, 10));

 p.add(p1, "North");

 

 jb_bk = new JButton("Backspace");

 jb_bk.setForeground(Color.RED);

 jb_bk.addActionListener(this);

 

 jb_ce = new JButton("CE");

 jb_ce.setForeground(Color.RED);

 jb_ce.addActionListener(this);

 

 jb_c = new JButton("C");

 jb_c.setForeground(Color.RED);

 jb_c.addActionListener(this);

 

 p1.add(jb_bk);

 p1.add(jb_ce);

 p1.add(jb_c);

 

 JPanel p2 = new JPanel(new GridLayout(4, 5, 3, 3)); p.add(p2, BorderLayout.CENTER);

 jb_key = new JButton[str.length];

 for (int i = 0; i < >

  jb_key[i] = new JButton(str[i]);

  jb_key[i].addActionListener(this);

  if (i == 3 || i == 8 || i == 13 || i == 18 || i == 19) {

  jb_key[i].setForeground(Color.RED);

  } else {

  jb_key[i].setForeground(Color.BLUE);

  }

  p2.add(jb_key[i]);

 }

 

 this.add(p, BorderLayout.CENTER);

 this.setTitle("计算器");

 this.setIconImage(new ImageIcon("image/1.jpg").getImage());

 this.setBackground(Color.LIGHT_GRAY);

 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 this.setBounds((1280 - 300) / 2, (768 - 200) / 2, 340, 260);

 this.setVisible(true);

 }

 

 public static void main(String[] args) {

 new GS().creatGUI();

 }

 

 @Override

 public void actionPerformed(ActionEvent e) {

 // TODO Auto-generated method stub

 String act = e.getActionCommand();

 // 控制键

 if (e.getSource() == jb_bk) {

  if (tf_out.getText().length() > 1){

  tf_out.setText(tf_out.getText().substring(0, tf_out.getText().length() - 1));

  }else{

  tf_out.setText("0");

  }

  return;

 }else if (e.getSource() == jb_ce || e.getSource() == jb_c) {

  tf_out.setText("0");

  ch = '#';

  return;

 }

 

 // 数字键

 if (act == "0") {

  if (!tf_out.getText().equals("0")) {

  tf_out.setText(tf_out.getText());

  }

 } else if (act == "1" || act == "2" || act == "3" || act == "4" || act == "5"

  || act == "6" || act == "7" || act == "9") {

  tf_out.setText(tf_out.getText());

 }

 

 // 运算符

 if (act.equals("+/-")) {

  if (tf_out.getText().charAt(0) != '-') {

  tf_out.setText("-" + tf_out.getText());

  } else {

  tf_out.setText(tf_out.getText().substring(1));

  }

 } else if (act.equals(".")) {

  tf_out.setText(tf_out.getText() + act);

  ch = '#';

 } else if (act != "1/x" && act.charAt(0) >= '0' && act.charAt(0) 

  if (can) {

  tf_out.setText(act);

  can = false;

  } else {

  try {

   if (Double.parseDouble(tf_out.getText()) == 0) {

   if (tf_out.getText().equals("0.")) {

    tf_out.setText(tf_out.getText() + act);

   } else {

    tf_out.setText(act);

   }

   } else {

   tf_out.setText(tf_out.getText() + act);

   }

  } catch (NumberFormatException e1) {

   JOptionPane.showMessageDialog(null, "输入格式错误!", "警告!",JOptionPane.ERROR_MESSAGE);

  }

 

  }

 } else if (act.equals("+") || act.equals("-") || act.equals("*")

  || act.equals("/")) {

  if (ch != '#') {

  try {

   num1 = operation(num1, ch, Double.parseDouble(tf_out.getText()));

   tf_out.setText(String.valueOf(num1));

   ch = act.charAt(0);

   can = true;

   return;

  } catch (NumberFormatException e1) {

   JOptionPane.showMessageDialog(null, "输入格式错误!", "警告!",JOptionPane.ERROR_MESSAGE);

   return;

  }

  } else {

  try {

   num1 = Double.parseDouble(tf_out.getText());

   ch = act.charAt(0);

   can = true;

   return;

  } catch (NumberFormatException e1) {

   JOptionPane.showMessageDialog(null, "输入格式错误!", "警告!",JOptionPane.ERROR_MESSAGE);

   return;

  }

  }

 } else if (act.equals("sqrt")) {

  try {

  double num = (double) Math.sqrt(Double.parseDouble(tf_out.getText()));

  tf_out.setText(String.valueOf(num));

  can = true;

  return;

  } catch (NumberFormatException e1) {

  JOptionPane.showMessageDialog(null, "输入格式错误!", "警告!",JOptionPane.ERROR_MESSAGE);

  }

 } else if (act.equals("1/x")) {

  try {

  double num = 1 / Double.parseDouble(tf_out.getText());

  tf_out.setText(String.valueOf(num));

  can = true;

  return;

  } catch (NumberFormatException e1) {

  JOptionPane.showMessageDialog(null, "输入格式错误!", "警告!",JOptionPane.ERROR_MESSAGE);

  return;

  } catch (ArithmeticException e1) {

  JOptionPane.showMessageDialog(null, "除0错误!", "警告!", JOptionPane.ERROR_MESSAGE);

  }

 } else if (act.equals("=")) {

  can = true;

  try {

  if (ch == '#') {

   return;

  }

  double num = Double.parseDouble(tf_out.getText());

  num1 = operation(num1, ch, num);

  tf_out.setText(String.valueOf(num1));

  ch = '#';

  return;

  } catch (NumberFormatException e1) {

  JOptionPane.showMessageDialog(null, "输入格式错误!", "警告!",JOptionPane.ERROR_MESSAGE);

  return;

  }

 } else if (act.equals("%")) {

  double num = Double.valueOf(tf_out.getText()).doubleValue();

  tf_out.setText(String.valueOf(num1));

  double sum = (num1 * num) / 100;

  tf_out.setText(String.valueOf(sum));

  return;

 }

 }

 

 // 运算

 public double operation(double a, char c, double b) {

 double sum;

 switch (c) {

 case '+':

  sum = a + b;

  break;

 case '-':

  sum = a - b;

  break;

 case '*':

  sum = a * b;

  break;

 case '/':

  if (b == 0) {

  JOptionPane.showMessageDialog(null, "除0错误!", "警告!",JOptionPane.ERROR_MESSAGE);

  return 0;

  }

  sum = a / b;

  break;

 default:

  return 0;

 }

 return sum;

 }

}

 

 

 

声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com