用java实现一个简单的计算器
java简单的计算器简介
提示: 如因为jdk版问题提上边的代码报错则可以使用博客下方的代码。
使用Java实现一个简单的整数计算器,可是实现加减乘除操作,使用swing,awt模型开发。相比一些常见的计算器,本文设计的计算器可以实现多个操作符的长公式计算。
本文设计的计算器在被除数是0的时候会自动除以一,以此防止出现错误。
将会进行的改变
本文设计的计算器暂时只支持简单的加减乘除操作,之后会添加浮点数的加减乘除及其他负载一些的操作。
使用的环境
jdk1.8
本文使用IDEA做的代码demo,但是代码可在所有java编辑器上运行,
问题
如有问题欢迎指出,
代码
package lxl.testdemo;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MiniJisuanqi extends JFrame {
JPanel jPanelText;
JTextField textField;
JPanel jPanelButton;
JButton jButton1;
JButton jButton2;
JButton jButton3;
JButton jButtonAdd;
JButton jButton4;
JButton jButton5;
JButton jButton6;
JButton jButtonJian;
JButton jButton7;
JButton jButton8;
JButton jButton9;
JButton jButtonMul;
JButton jButton0;
JButton jButtonChu;
JButton jButtonHu;
JButton jButtonEqual;
int sum=0;
String opString="";
// 数字键的监听器
public ActionListener buttonListener(String text){
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textField.setText(textField.getText()+text);
}
};
}
//清除键的监听器
public ActionListener clearButtonListener(){
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textField.setText("");
}
};
}
//计算操作
private void ops(){
switch (opString) {
case "+":
if (textField.getText() != "") {
sum += Integer.parseInt(textField.getText());
}
else sum +=0;
textField.setText(sum+"");
opString="";
break;
case "-":
if (textField.getText() != "") {
sum -= Integer.parseInt(textField.getText());
}
else sum -=0;
textField.setText(sum+"");
opString="";
break;
case "*":
if (textField.getText() != "") {
sum *= Integer.parseInt(textField.getText());
}
else sum *=0;
textField.setText(sum+"");
opString="";
break;
case "/":
if (textField.getText() != "") {
sum /= Integer.parseInt(textField.getText())!=0?Integer.parseInt(textField.getText()):1;
}
else sum /= 1;
textField.setText(sum+"");
opString="";
break;
}
}
//加减乘除及等于号的监听器
public ActionListener optButtonListener(String op){
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (op!="="){
ops();
opString=op;
if (textField.getText() != "") {
sum = Integer.parseInt(textField.getText());
textField.setText("");
}
else sum=0;
}
else {
ops();
}
}
};
}
//初始化界面操作
public MiniJisuanqi(){
jPanelText = new JPanel();
textField = new JTextField(25);
textField.setText("");
textField.setEditable(true);
jPanelText.add(textField);
jPanelButton = new JPanel(new GridLayout(4,4,10,10));
jButton1 = new JButton("1");
jButton1.addActionListener(buttonListener(jButton1.getText()));
jButton2 = new JButton("2");
jButton2.addActionListener(buttonListener(jButton2.getText()));
jButton3 = new JButton("3");
jButton3.addActionListener(buttonListener(jButton3.getText()));
jButtonAdd = new JButton("+");
jButtonAdd.addActionListener(optButtonListener(jButtonAdd.getText()));
jButton4 = new JButton("4");
jButton4.addActionListener(buttonListener(jButton4.getText()));
jButton5 = new JButton("5");
jButton5.addActionListener(buttonListener(jButton5.getText()));
jButton6 = new JButton("6");
jButton6.addActionListener(buttonListener(jButton6.getText()));
jButtonJian = new JButton("-");
jButtonJian.addActionListener(optButtonListener(jButtonJian.getText()));
jButton7 = new JButton("7");
jButton7.addActionListener(buttonListener(jButton7.getText()));
jButton8 = new JButton("8");
jButton8.addActionListener(buttonListener(jButton8.getText()));
jButton9 = new JButton("9");
jButton9.addActionListener(buttonListener(jButton9.getText()));
jButtonMul = new JButton("*");
jButtonMul.addActionListener(optButtonListener(jButtonMul.getText()));
jButton0 = new JButton("0");
jButton0.addActionListener(buttonListener(jButton0.getText()));
jButtonChu = new JButton("/");
jButtonChu.addActionListener(optButtonListener(jButtonChu.getText()));
jButtonHu = new JButton("清除");
jButtonHu.addActionListener(clearButtonListener());
jButtonEqual = new JButton("=");
jButtonEqual.addActionListener(optButtonListener(jButtonEqual.getText()));
jPanelButton.add(jButton1);jPanelButton.add(jButton2);jPanelButton.add(jButton3);jPanelButton.add(jButtonAdd);
jPanelButton.add(jButton4);jPanelButton.add(jButton5);jPanelButton.add(jButton6);jPanelButton.add(jButtonJian);
jPanelButton.add(jButton7);jPanelButton.add(jButton8);jPanelButton.add(jButton9);jPanelButton.add(jButtonMul);
jPanelButton.add(jButton0);jPanelButton.add(jButtonEqual);jPanelButton.add(jButtonHu);jPanelButton.add(jButtonChu);
getContentPane().add("North",jPanelText);
getContentPane().add("Center",jPanelButton);
}
主函数
public static void main(String[] args) {
MiniJisuanqi miniJisuanqi = new MiniJisuanqi();
miniJisuanqi.setTitle("简单计算器");
miniJisuanqi.setVisible(true);
miniJisuanqi.pack();
miniJisuanqi.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
miniJisuanqi.setResizable(false);
}
}
以下是计算机初始化的样式。
如果因为jdk版本问题无法在switch中使用字符串则使用如下代码代替:
package wf;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MiniJisuanqi extends JFrame {
JPanel jPanelText;
JTextField textField;
JPanel jPanelButton;
JButton jButton1;
JButton jButton2;
JButton jButton3;
JButton jButtonAdd;
JButton jButton4;
JButton jButton5;
JButton jButton6;
JButton jButtonJian;
JButton jButton7;
JButton jButton8;
JButton jButton9;
JButton jButtonMul;
JButton jButton0;
JButton jButtonChu;
JButton jButtonHu;
JButton jButtonEqual;
int sum=0;
public String opString="";
public int opInt = 0;
// 数字键的监听器
public ActionListener buttonListener(final String text){
return new ActionListener() {
public void actionPerformed(ActionEvent e) {
textField.setText(textField.getText()+text);
}
};
}
//清除键的监听器
public ActionListener clearButtonListener(){
return new ActionListener() {
public void actionPerformed(ActionEvent e) {
textField.setText("");
}
};
}
//计算操作
private void ops(){
switch (opInt) {
case 1:
if (textField.getText() != "") {
sum += Integer.parseInt(textField.getText());
}
else sum +=0;
textField.setText(sum+"");
opString="";
opInt=0;
break;
case 2:
if (textField.getText() != "") {
sum -= Integer.parseInt(textField.getText());
}
else sum -=0;
textField.setText(sum+"");
opString="";
opInt=0;
break;
case 3:
if (textField.getText() != "") {
sum *= Integer.parseInt(textField.getText());
}
else sum *=0;
textField.setText(sum+"");
opString="";
opInt=0;
break;
case 4:
if (textField.getText() != "") {
sum /= Integer.parseInt(textField.getText())!=0?Integer.parseInt(textField.getText()):1;
}
else sum /= 1;
textField.setText(sum+"");
opString="";
opInt=0;
break;
}
}
//加减乘除及等于号的监听器
public ActionListener optButtonListener(final String op){
return new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (!op.equals("=")){
ops();
opString=op;
if (op.equals("+")){
MiniJisuanqi.this.opInt=1;
}else if (op.equals("-")){
MiniJisuanqi.this.opInt=2;
}else if (op.equals("*")){
MiniJisuanqi.this.opInt=3;
}else if (op.equals("/")){
MiniJisuanqi.this.opInt=4;
}
//opInt=0;
if (textField.getText() != "") {
sum = Integer.parseInt(textField.getText());
textField.setText("");
}
else sum=0;
}
else {
System.out.println("dengyuhao " + MiniJisuanqi.this.opInt);
ops();
}
}
};
}
//初始化界面操作
public MiniJisuanqi(){
jPanelText = new JPanel();
textField = new JTextField(25);
textField.setText("");
textField.setEditable(true);
jPanelText.add(textField);
jPanelButton = new JPanel(new GridLayout(4,4,10,10));
jButton1 = new JButton("1");
jButton1.addActionListener(buttonListener(jButton1.getText()));
jButton2 = new JButton("2");
jButton2.addActionListener(buttonListener(jButton2.getText()));
jButton3 = new JButton("3");
jButton3.addActionListener(buttonListener(jButton3.getText()));
jButtonAdd = new JButton("+");
jButtonAdd.addActionListener(optButtonListener(jButtonAdd.getText()));
jButton4 = new JButton("4");
jButton4.addActionListener(buttonListener(jButton4.getText()));
jButton5 = new JButton("5");
jButton5.addActionListener(buttonListener(jButton5.getText()));
jButton6 = new JButton("6");
jButton6.addActionListener(buttonListener(jButton6.getText()));
jButtonJian = new JButton("-");
jButtonJian.addActionListener(optButtonListener(jButtonJian.getText()));
jButton7 = new JButton("7");
jButton7.addActionListener(buttonListener(jButton7.getText()));
jButton8 = new JButton("8");
jButton8.addActionListener(buttonListener(jButton8.getText()));
jButton9 = new JButton("9");
jButton9.addActionListener(buttonListener(jButton9.getText()));
jButtonMul = new JButton("*");
jButtonMul.addActionListener(optButtonListener(jButtonMul.getText()));
jButton0 = new JButton("0");
jButton0.addActionListener(buttonListener(jButton0.getText()));
jButtonChu = new JButton("/");
jButtonChu.addActionListener(optButtonListener(jButtonChu.getText()));
jButtonHu = new JButton("清除");
jButtonHu.addActionListener(clearButtonListener());
jButtonEqual = new JButton("=");
jButtonEqual.addActionListener(optButtonListener(jButtonEqual.getText()));
jPanelButton.add(jButton1);jPanelButton.add(jButton2);jPanelButton.add(jButton3);jPanelButton.add(jButtonAdd);
jPanelButton.add(jButton4);jPanelButton.add(jButton5);jPanelButton.add(jButton6);jPanelButton.add(jButtonJian);
jPanelButton.add(jButton7);jPanelButton.add(jButton8);jPanelButton.add(jButton9);jPanelButton.add(jButtonMul);
jPanelButton.add(jButton0);jPanelButton.add(jButtonEqual);jPanelButton.add(jButtonHu);jPanelButton.add(jButtonChu);
getContentPane().add("North",jPanelText);
getContentPane().add("Center",jPanelButton);
}
//主函数
public static void main(String[] args) {
MiniJisuanqi miniJisuanqi = new MiniJisuanqi();
miniJisuanqi.setTitle("简单计算器");
miniJisuanqi.setVisible(true);
miniJisuanqi.pack();
miniJisuanqi.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
miniJisuanqi.setResizable(false);
}
}