迫于Java老师布置的这个计算器项目还要答辩,无奈之下自己写了一个windows版的计算器,可以键盘输入也可以鼠标点击,有需要的朋友可以借鉴一下哈。
下面左边的是windows电脑自带的计算器,右边的是代码实现下的计算器。
功能都可以实现哟
下方是代码,各位看官老爷敬请观看,有注释哈,不懂的请在评论留言。
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class Calculator extends JFrame{
public static void main(String[] args) {
Calculator page=new Calculator();
}
String d="";//计算机上显示的式子
String result="";//计算机上按”=“键之后显示的结果
int flag=0,style=0;//style的值判断是加减乘除哪种运算,flag的值判断是否为小数运算
//连续进行算法的判断条件boo,bo
boolean boo=false;
boolean bo=false;
Calculator() {
//界面设置
JFrame jFrame=new JFrame();
jFrame.setSize(340,540);
//布局
jFrame.setLayout(null);
//关闭方式
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//打开时的默认位置
jFrame.setLocationRelativeTo(null);
jFrame.setTitle("计算器");
//设置按钮中的字体样式
Font font_one = new Font("Courier New",Font.BOLD,24);
Font font_two = new Font("Courier New", Font.PLAIN,16);
Font font_three = new Font("Courier New", Font.PLAIN,24);
Font font_four = new Font("Courier New", Font.PLAIN,16);
//设置计算器界面中的各种按钮
JButton j_one=new JButton("+/-");
j_one.setBounds(5,450,75,50);
//调用按钮字体样式
j_one.setFont(font_two);
//按钮背景颜色
j_one.setBackground(Color.white);
//加入界面
jFrame.add(j_one);
//下方都是按钮
//在这里也可以提却方法,然后用for循环来设置按钮,但我是午休之后写的,脑子比较昏,当时没想到,写完看到这么多代码,头都大了
JButton j_two=new JButton("0");
j_two.setBounds(85,450,75,50);
j_two.setFont(font_one);
j_two.setBackground(Color.white);
jFrame.add(j_two);
JButton j_three=new JButton(".");
j_three.setBounds(165,450,75,50);
j_three.setFont(font_two);
j_three.setBackground(Color.white);
jFrame.add(j_three);
JButton j_four=new JButton("=");
j_four.setBounds(245,450,75,50);
j_four.setBackground(Color.DARK_GRAY);
j_four.setFont(font_one);
//按钮字体颜色
j_four.setForeground(Color.WHITE);
jFrame.add(j_four);
JButton j_five=new JButton("1");
j_five.setBounds(5,398,75,50);
j_five.setFont(font_one);
j_five.setBackground(Color.white);
jFrame.add(j_five);
JButton j_six=new JButton("2");
j_six.setBounds(85,398,75,50);
j_six.setFont(font_one);
j_six.setBackground(Color.white);
jFrame.add(j_six);
JButton j_seven=new JButton("3");
j_seven.setBounds(165,398,75,50);
j_seven.setFont(font_one);
j_seven.setBackground(Color.white);
jFrame.add(j_seven);
JButton j_eight=new JButton("+");
j_eight.setBounds(245,398,75,50);
j_eight.setFont(font_three);
j_eight.setBackground(Color.white);
jFrame.add(j_eight);
JButton j_nine=new JButton("4");
j_nine.setBounds(5,346,75,50);
j_nine.setFont(font_one);
j_nine.setBackground(Color.white);
jFrame.add(j_nine);
JButton j_ten=new JButton("5");
j_ten.setBounds(85,346,75,50);
j_ten.setFont(font_one);
j_ten.setBackground(Color.white);
jFrame.add(j_ten);
JButton j_eleven=new JButton("6");
j_eleven.setBounds(165,346,75,50);
j_eleven.setFont(font_one);
j_eleven.setBackground(Color.white);
jFrame.add(j_eleven);
JButton j_twelve=new JButton("-");
j_twelve.setBounds(245,346,75,50);
j_twelve.setFont(font_three);
j_twelve.setBackground(Color.white);
jFrame.add(j_twelve);
JButton j_thirteen=new JButton("7");
j_thirteen.setBounds(5,294,75,50);
j_thirteen.setFont(font_one);
j_thirteen.setBackground(Color.white);
jFrame.add(j_thirteen);
JButton j_fourteen=new JButton("8");
j_fourteen.setBounds(85,294,75,50);
j_fourteen.setFont(font_one);
j_fourteen.setBackground(Color.white);
jFrame.add(j_fourteen);
JButton j_fifteen=new JButton("9");
j_fifteen.setBounds(165,294,75,50);
j_fifteen.setFont(font_one);
j_fifteen.setBackground(Color.white);
jFrame.add(j_fifteen);
JButton j_sixteen=new JButton("×");
j_sixteen.setBounds(245,294,75,50);
j_sixteen.setFont(font_three);
j_sixteen.setBackground(Color.white);
jFrame.add(j_sixteen);
JButton j_seventeen=new JButton("1/x");
j_seventeen.setBounds(5,242,75,50);
j_seventeen.setFont(font_two);
j_seventeen.setBackground(Color.white);
jFrame.add(j_seventeen);
JButton j_eighteen=new JButton("x²");
j_eighteen.setBounds(85,242,75,50);
j_eighteen.setFont(font_two);
j_eighteen.setBackground(Color.white);
jFrame.add(j_eighteen);
JButton j_nineteen=new JButton("√x");
j_nineteen.setBounds(165,242,75,50);
j_nineteen.setFont(font_two);
j_nineteen.setBackground(Color.white);
jFrame.add(j_nineteen);
JButton j_twenty=new JButton("÷");
j_twenty.setBounds(245,242,75,50);
j_twenty.setFont(font_three);
j_twenty.setBackground(Color.white);
jFrame.add(j_twenty);
JButton j1=new JButton("%");
j1.setBounds(5,190,75,50);
j1.setFont(font_three);
j1.setBackground(Color.white);
jFrame.add(j1);
JButton j2=new JButton("CE");
j2.setBounds(85,190,75,50);
j2.setFont(font_two);
j2.setBackground(Color.white);
jFrame.add(j2);
JButton j3=new JButton("C");
j3.setBounds(165,190,75,50);
j3.setFont(font_two);
j3.setBackground(Color.white);
jFrame.add(j3);
JButton j4=new JButton("⌫");
j4.setBounds(245,190,75,50);
j4.setFont(font_three);
j4.setBackground(Color.white);
jFrame.add(j4);
JButton M1=new JButton("MC");
M1.setBackground(Color.white);
M1.setBorder(null);
M1.setFont(font_four);
M1.setBounds(10,160,40,20);
jFrame.add(M1);
JButton M2=new JButton("MR");
M2.setBackground(Color.white);
M2.setBorder(null);
M2.setFont(font_four);
M2.setBounds(60,160,40,20);
jFrame.add(M2);
JButton M3=new JButton("M+");
M3.setBackground(Color.white);
M3.setBorder(null);
M3.setFont(font_four);
M3.setBounds(110,160,40,20);
jFrame.add(M3);
JButton M4=new JButton("M-");
M4.setBackground(Color.white);
M4.setBorder(null);
M4.setFont(font_four);
M4.setBounds(160,160,40,20);
jFrame.add(M4);
JButton M5=new JButton("MS");
M5.setBackground(Color.white);
M5.setBorder(null);
M5.setFont(font_four);
M5.setBounds(210,160,40,20);
jFrame.add(M5);
JButton M6=new JButton("Mv");
M6.setBackground(Color.white);
M6.setBorder(null);
M6.setFont(font_four);
M6.setBounds(260,160,40,20);
jFrame.add(M6);
//文本框区域,计算器上显示区域
JTextField jTextField=new JFormattedTextField(0);
jTextField.setBounds(5,30,318,100);
//文本从右边开始
jTextField.setHorizontalAlignment(JTextField.RIGHT);
//设置显示字体
jTextField.setFont(font_one);
jFrame.add(jTextField);
jFrame.setVisible(true);
//数字0~9按钮设置鼠标监听设置
extracted(j_two, jTextField);
extracted(j_five, jTextField);
extracted(j_six, jTextField);
extracted(j_seven, jTextField);
extracted(j_nine, jTextField);
extracted(j_ten, jTextField);
extracted(j_eleven, jTextField);
extracted(j_thirteen, jTextField);
extracted(j_fourteen, jTextField);
extracted(j_fifteen, jTextField);
//按钮‘.’的鼠标监听
j_three.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
if (e.getButton() == 1) {
flag=1;//表示为小数运算
d=d+j_three.getText();//更新d的值
jTextField.setText(d);//在计算器上显示出来
}
}
});
j4.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
if(e.getButton()==1){
String f="";
//删除键的原理,就是去掉最后一位。
for (int i = 0; i < d.length()-1; i++) {
f+=d.charAt(i);
}
d=f;
jTextField.setText(d);
}
}
});
//这是一键清除按钮的设置
extracted1(j2, jTextField);
extracted1(j3, jTextField);
//这是计算器加减乘除功能按钮设置
extracted1(j_eight, jTextField,1);
extracted1(j_twelve, jTextField,2);
extracted1(j_sixteen, jTextField,3);
extracted1(j_twenty, jTextField,4);
//特殊功能按钮1:‘1/x’按钮的设置
j_seventeen.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
if(e.getButton()==1){
result=(1.0/Double.parseDouble(d))+"";
flag=1;
jTextField.setText(result);
d=result;
}
}
});
//特殊功能按钮2:‘x^2’按钮的设置
j_eighteen.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
if(e.getButton()==1){
if(flag==0){
result=Integer.parseInt(d)*Integer.parseInt(d)+"";
}else{
result=Double.parseDouble(d)*Double.parseDouble(d)+"";
}
jTextField.setText(result);
d=result;
}
}
});
//特殊功能按钮3:‘根号下x’按钮的设置
j_nineteen.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
if(e.getButton()==1){
if(flag==0){
result=Math.sqrt(Integer.parseInt(d))+"";
}else{
result=Math.sqrt(Double.parseDouble(d))+"";
}
jTextField.setText(result);
d=result;
flag=1;
}
}
});
//特殊功能按钮4:‘%’按钮的设置,功能为让小数点前移2位
j1.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
if(e.getButton()==1){
double a=Double.parseDouble(d);
//警告,不能用int,如果是int类型的/100之后的得到的只是整数
//eg:1/100=0,1000/100=10
a=a/100;
d=a+"";
jTextField.setText(d);
flag=1;
}
}
});
//特殊功能按钮5:‘+/-’按钮的设置,功能给数字转换正负
j_one.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
if(e.getButton()==1){
if(d.charAt(0)!='-'&&d.charAt(0)!='+'){
d="-"+d;
}else if(d.charAt(0)!='+'){
String s="";
for (int i = 1; i < d.length(); i++) {
s+=d.charAt(i);
}
d=s;
}else{
String s="";
for (int i = 1; i < d.length(); i++) {
s+=d.charAt(i);
}
d=s;
}
jTextField.setText(d);
}
}
});
特殊功能按钮6:‘=’按钮的设置,功能:得到结果
j_four.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
if(e.getButton()==1){
//整数计算
extracted("\\×", "\\÷");
d=result;
style=0;
boo=false;
jTextField.setText(result);
}
}
});
//特殊功能按钮7,功能:点击Mv按钮后满足连续运算得条件1,boo
M6.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
if(e.getButton()==1){
boo=true;
}
}
});
//键盘监听
jTextField.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
super.keyTyped(e);
//监听0~9的数字和'.'和加减乘除
if (Character.isDigit(e.getKeyChar())) {
int digit = Character.getNumericValue(e.getKeyChar());
d = d+digit;
}
if(e.getKeyChar()=='.'){
flag=1;
d=d+e.getKeyCode();
}
if(e.getKeyChar()=='+'){
style=1;
d=d+e.getKeyChar();
boo=true;
}
if(e.getKeyChar()=='-'){
style=2;
d=d+e.getKeyChar();
boo=true;
}
if(e.getKeyChar()=='*'){
style=3;
d=d+e.getKeyChar();
boo=true;
}
if(e.getKeyChar()=='/'){
style=4;
d=d+e.getKeyChar();
boo=true;
}
}
//键盘监听回车键和删除键
@Override
public void keyPressed(KeyEvent e) {
super.keyPressed(e);
//回车
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
Calculator.this.extracted("\\*", "\\/");
d=result;
style=0;
jTextField.setText(d);
boo=false;
}
//删除
if(e.getKeyCode()==KeyEvent.VK_BACK_SPACE){
String f="";
for (int i = 0; i < d.length()-1; i++) {
f+=d.charAt(i);
}
d=f;
}
}
});
}
private void extracted(String regex, String regex1) {
if (flag == 0) {
if (style == 1) {
String[] str = d.split("\\+");
result = Integer.parseInt(str[0]) + Integer.parseInt(str[1]) + "";
} else if (style == 2) {
if(d.charAt(0)=='-'){
String s="";
for (int i = 1; i < d.length(); i++) {
s+=d.charAt(i);
}
d=s;
String[] str = d.split("\\-");
result = -Integer.parseInt(str[0]) - Integer.parseInt(str[1]) + "";
}else {
String[] str = d.split("\\-");
result = Integer.parseInt(str[0]) - Integer.parseInt(str[1]) + "";
}
} else if (style == 3) {
String[] str = d.split(regex);
result = Integer.parseInt(str[0]) * Integer.parseInt(str[1]) + "";
} else if (style == 4) {
String[] str = d.split(regex1);
result = Integer.parseInt(str[0]) / Integer.parseInt(str[1]) + "";
}
} else {
if (style == 1) {
String[] str = d.split("\\+");
result = Double.parseDouble(str[0]) + Double.parseDouble(str[1]) + "";
} else if (style == 2) {
String[] str = d.split("\\-");
result = Double.parseDouble(str[0]) - Double.parseDouble(str[1]) + "";
} else if (style == 3) {
String[] str = d.split(regex);
result = Double.parseDouble(str[0]) * Double.parseDouble(str[1]) + "";
} else if (style == 4) {
String[] str = d.split(regex1);
result = Double.parseDouble(str[0]) / Double.parseDouble(str[1]) + "";
}
}
}
private void extracted1(JButton j2, JTextField jTextField) {
j2.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
if(e.getButton()==1){
d="";
jTextField.setText(d);
boo=false;
bo=false;
flag=0;
style=0;
}
}
});
}
private void extracted1(JButton j, JTextField jTextField,int t) {
j.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
if (e.getButton() == 1) {
if(!bo||!boo){//经过=号的加减乘除运算
d=d+j.getText();
jTextField.setText(d);
bo=true;//满足连续运算的条件2.bo
// boo=true;
}else if(bo&&boo){//不经过=号直接进行连续加减乘除运算
extracted("\\×", "\\÷");
d=result+j.getText();
jTextField.setText(d);
}
style=t;
}
}
});
}
private void extracted(JButton j, JTextField jTextField) {
j.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
if (e.getButton() == 1) {
d=d+j.getText();
jTextField.setText(d);
}
}
});
}
}