java简单模仿win10计算器

本文实例为大家分享了Java实现win10计算器的具体代码,供大家参考,具体内容如下

这个小demo是我上学时的远古代码(嘻嘻嘻),今天整理代码时看到的,看着以前的代码,突然感觉这些是啥?看不懂了都,而且写得也不规范。

运行一下,还是可以的,先截张图

试了一下,bug还是有的,但是可以基本的运算,有兴趣的可以试一下

代码就贴在这里:

package com.waking.call;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

/**
 * 计算器小案例
 * @author waking
 *
 */
public class CalculatorExample {

 public static void main(String[] args) {
 // TODO Auto-generated method stub
 CalculatorFrame calculatorFrame=new CalculatorFrame();
 }
}
class CalculatorFrame extends JFrame{
 public CalculatorFrame() {//构造函数
 setTitle("计算器");
 setSize(340,500);
 CalcultorPanel calcultorPanel=new CalcultorPanel();
 getContentPane().add(calcultorPanel);//给当前Frame添加面板
 setLocationRelativeTo(null);//居中
 setDefaultCloseOperation(EXIT_ON_CLOSE);
 setVisible(true);
 }
}
class CalcultorPanel extends JPanel{//主面板
 public static boolean start=true;//新数字键输入的开始
 public static String result="";//保存中间结果的参数
 public static String lastcommand="=";//记录上一个运算符
 public static boolean firstDigit = true;//输入第一个数
 public CalcultorPanel() {
 setLayout(new BorderLayout());
 ShowPanel showPanel=new ShowPanel();
 BTNPanel btnPanel=new BTNPanel();
 add(showPanel, BorderLayout.NORTH);
 add(btnPanel,BorderLayout.CENTER);
 }
}
class ShowPanel extends JPanel{//结果面板
 public static JLabel display1;
 public static JLabel display2;
 public ShowPanel() {
 display1=new JLabel("",SwingConstants.RIGHT);
 display2=new JLabel("0",SwingConstants.RIGHT);
 display1.setFont(new Font("黑体",Font.BOLD,30));
 display2.setFont(new Font("黑体",Font.BOLD,40));
 display1.setPreferredSize(new Dimension(300, 80));
 display2.setPreferredSize(new Dimension(300, 50));
 setLayout(new BorderLayout());
 add(display1,BorderLayout.NORTH);
 add(display2,BorderLayout.CENTER);
 }
}
class BTNPanel extends JPanel{//按钮面板
 public BTNPanel() {
 setLayout(new GridLayout(6, 4));
 InsertAciton insertAciton=new InsertAciton();
 CommandAction commandAction=new CommandAction();
 addButton("%", commandAction);
 addButton("√", commandAction);
 addButton("pow", commandAction);
 addButton("1/x", commandAction);
 addButton("CE", commandAction);
 addButton("C", commandAction);
 addButton("<<", commandAction);
 addButton("/",commandAction);
 addButton("7",insertAciton);
 addButton("8",insertAciton);
 addButton("9",insertAciton);
 addButton("*",commandAction);
 addButton("4",insertAciton);
 addButton("5",insertAciton);
 addButton("6",insertAciton);
 addButton("-",commandAction);
 addButton("1",insertAciton);
 addButton("2",insertAciton);
 addButton("3",insertAciton);
 addButton("+",commandAction);
 addButton("+/-",commandAction);
 addButton("0",insertAciton);
 addButton(".",insertAciton);
 addButton("=",commandAction);

 }
 void addButton(String label,ActionListener actionListener) {//添加按钮
 JButton button=new JButton(label);
 button.setFont(new Font("黑体",Font.BOLD,15));
 button.addActionListener(actionListener);
 add(button);
 }
}
class InsertAciton implements ActionListener{//数字键按钮事件
 @Override

 public void actionPerformed(ActionEvent e) {
 // TODO Auto-generated method stub
 if(CalcultorPanel.start==true) {
  //清空文本
  ShowPanel.display1.setText("");
  ShowPanel.display2.setText("");
  CalcultorPanel.start=false;
 }
  if ("0123456789.".indexOf(e.getActionCommand()) >= 0) {
  if (CalcultorPanel.firstDigit) {
       // 输入的第一个数字
  if(e.getActionCommand().equals(".")) {//如果第一个是“.”
  ShowPanel.display2.setText("0.");
   }else if(e.getActionCommand().equals("0")) {//如果第一个是“0”
   ShowPanel.display2.setText("0");
   CalcultorPanel.firstDigit=true;
   return;
   }
   else ShowPanel.display2.setText(e.getActionCommand());
  }
  else if ((e.getActionCommand().equals(".")) && (ShowPanel.display2.getText().indexOf(".") < 0)) {
      // 输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面
  ShowPanel.display2.setText(ShowPanel.display2.getText() + ".");
    }
    else //if(Double.parseDouble(ShowPanel.display2.getText())!=0)
    if (!e.getActionCommand().equals(".")) {
      // 如果输入的不是小数点,则将数字附在结果文本框的后面
     ShowPanel.display2.setText(ShowPanel.display2.getText() + e.getActionCommand());
    }
    // 以后输入的肯定不是第一个数字了
  CalcultorPanel.firstDigit = false;
 }
 }

}
class CommandAction implements ActionListener{//功能事件

 public void actionPerformed(ActionEvent e) {
 // TODO Auto-generated method stub

 String string = e.getActionCommand();
 if(string.equals("CE")) {
  ShowPanel.display1.setText("");
  ShowPanel.display2.setText("0");
    }else if(string.equals("C")) {
     CalcultorPanel.start=true;//新数字键输入的开始
     CalcultorPanel.result="";//保存中间结果的参数
     CalcultorPanel.lastcommand="=";//记录上一个运算符
     CalcultorPanel.firstDigit = true;//输入第一个数
     ShowPanel.display1.setText("");
     ShowPanel.display2.setText("0");
    }else if(string.equals("<<")) {//退格
     ShowPanel.display1.setText("");
     String text=ShowPanel.display2.getText();
     int i = text.length();
       if (i > 0) {
         // 退格,将文本最后一个字符去掉
         text = text.substring(0, i - 1);
         if (text.length() == 0) {
           // 如果文本没有了内容,则初始化计算器的各种值
         ShowPanel.display2.setText("0");
         CalcultorPanel.firstDigit = true;
         CalcultorPanel.lastcommand = "=";
         } else {
           // 显示新的文本
         ShowPanel.display2.setText(text);
         }
       }
     } else if(string.equals("+/-")) {
     String a1=ShowPanel.display2.getText();
     ShowPanel.display1.setText("");
     if(a1.indexOf("-")==-1) {
      if(Double.parseDouble(a1)!=0)
      ShowPanel.display2.setText("-"+ShowPanel.display2.getText());
      }
     else {
      ZeroText(Double.parseDouble(a1)*-1);
      }
  CalcultorPanel.result=a1;
     }else{
     CalcultorPanel.start=true;//新数字键的输入
     if(CalcultorPanel.lastcommand.equals("=")) //做一次运算
 {
  CalcultorPanel.result=ShowPanel.display2.getText(); //获取操作数1
 }
 else {
  if (CalcultorPanel.lastcommand.equals("%")) {
       // 百分号运算,除以100
  double a1=Double.parseDouble(CalcultorPanel.result);
  a1= a1 / 100;
  if (CalcultorPanel.result=="0.") //去除0.问题
   ShowPanel.display1.setText(0+"/100"+"=");
  else ShowPanel.display1.setText(CalcultorPanel.result+"/100=");
  ZeroText(a1);
  CalcultorPanel.result=a1+"";
     }else if (CalcultorPanel.lastcommand.equals("√")) {
       // 平方根运算
     double a1=Double.parseDouble(CalcultorPanel.result);
       a1 = Math.sqrt(a1);
       if(CalcultorPanel.result=="0.")//去除0.问题
       ShowPanel.display1.setText("√("+0+")"+"=");
       else ShowPanel.display1.setText("√"+"("+CalcultorPanel.result+")=");
       ZeroText(a1);
  CalcultorPanel.result=a1+"";
     }else if(CalcultorPanel.lastcommand.equals("pow")) {
     double a1=Double.parseDouble(CalcultorPanel.result);
     double a2=Double.parseDouble(ShowPanel.display2.getText());
     double s=Math.pow(a1,a2);
     if (CalcultorPanel.result=="0.") {//去除0.问题
   if(ShowPanel.display2.getText()=="0.")
   ShowPanel.display1.setText("pow("+0+","+0+")"+"=");
   else ShowPanel.display1.setText("pow("+0+","+ShowPanel.display2.getText()+")"+"=");
  }else if(ShowPanel.display2.getText()=="0.") {
   ShowPanel.display1.setText("pow("+CalcultorPanel.result+","+0+")"+"=");
  }else
     ShowPanel.display1.setText("pow"+"("+CalcultorPanel.result+","+ShowPanel.display2.getText()+")=");
     ZeroText(s);
  CalcultorPanel.result=a1+"";
     }else if (CalcultorPanel.lastcommand.equals("1/x")) {
       // 倒数运算
     double a1=Double.parseDouble(CalcultorPanel.result);
       if (a1 == 0.0) {
         // 操作不合法
       ShowPanel.display2.setText("零没有倒数");
       } else {
       a1 = 1 / a1;
       ShowPanel.display1.setText("1"+"/"+CalcultorPanel.result+"=");
       ZeroText(a1);
   CalcultorPanel.result=a1+"";
       }
     }
 else if(CalcultorPanel.lastcommand.equals("+")) {
  double a1=Double.parseDouble(CalcultorPanel.result);
  double a2=Double.parseDouble(ShowPanel.display2.getText());
  double s=a1+a2;
  if (CalcultorPanel.result=="0.") {//去除0.问题
   if(ShowPanel.display2.getText()=="0.")
   ShowPanel.display1.setText(0+"+"+0+"=");
   else ShowPanel.display1.setText(0+"+"+ShowPanel.display2.getText()+"=");
  }else if(ShowPanel.display2.getText()=="0.") {
   ShowPanel.display1.setText(CalcultorPanel.result+"+"+0+"=");
  }else
  ShowPanel.display1.setText(CalcultorPanel.result+"+"+ShowPanel.display2.getText()+"=");
  ZeroText(s);
  CalcultorPanel.result=s+"";
  }
  else if(CalcultorPanel.lastcommand.equals("-")) {
  double a1=Double.parseDouble(CalcultorPanel.result);
  double a2=Double.parseDouble(ShowPanel.display2.getText());
  double s=a1-a2;
  if (CalcultorPanel.result=="0.") {//去除0.问题
   if(ShowPanel.display2.getText()=="0.")
   ShowPanel.display1.setText(0+"-"+0+"=");
   else ShowPanel.display1.setText(0+"-"+ShowPanel.display2.getText()+"=");
  }else if(ShowPanel.display2.getText()=="0.") {
   ShowPanel.display1.setText(CalcultorPanel.result+"-"+0+"=");
  }else
  ShowPanel.display1.setText(CalcultorPanel.result+"-"+ShowPanel.display2.getText()+"=");
  ZeroText(s);
  CalcultorPanel.result=s+"";
  }else if(CalcultorPanel.lastcommand.equals("*")) {
  double a1=Double.parseDouble(CalcultorPanel.result);
  double a2=Double.parseDouble(ShowPanel.display2.getText());
  double s=a1*a2;
  if (CalcultorPanel.result=="0.") {//去除0.问题
   if(ShowPanel.display2.getText()=="0.")
   ShowPanel.display1.setText(0+"*"+0+"=");
   else ShowPanel.display1.setText(0+"*"+ShowPanel.display2.getText()+"=");
  }else if(ShowPanel.display2.getText()=="0.") {
   ShowPanel.display1.setText(CalcultorPanel.result+"*"+0+"=");
  }else
  ShowPanel.display1.setText(CalcultorPanel.result+"*"+ShowPanel.display2.getText()+"=");
  ZeroText(s);
  CalcultorPanel.result=s+"";
  }else if (CalcultorPanel.lastcommand.equals("/")) {
       // 除法运算
       // 如果当前结果文本框中的值等于0
  double a1=Double.parseDouble(CalcultorPanel.result);
  double a2=Double.parseDouble(ShowPanel.display2.getText());
       if (a2 == 0.0) {
         // 操作不合法
       ShowPanel.display2.setText("除数不能为零");
       } else {
       double s=a1/a2;
       if(CalcultorPanel.result=="0.")//去除0.问题
        ShowPanel.display1.setText(0+"/"+ShowPanel.display2.getText()+"=");
       else ShowPanel.display1.setText(CalcultorPanel.result+"/"+ShowPanel.display2.getText()+"=");
   ZeroText(s);
   CalcultorPanel.result=s+"";
       }
     }
 } CalcultorPanel.lastcommand=e.getActionCommand();//获取当前的运算符
 CalcultorPanel.firstDigit = true;
 }
}
 public void ZeroText(double s) {
 long t1;
 double t2;
 t1 = (long) s;
 t2 = s-t1;
 if (t2 == 0) {
  ShowPanel.display2.setText(String.valueOf(t1));
 } else {
  ShowPanel.display2.setText(String.valueOf(s));
 }
 }
}
  • 不要介意我把类写在一起,因为那时我为什么写在一起,我现在也不知道了呀!
  • 有兴趣的你可以研究研究,感谢您的观看。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java实现简易计算器功能

    本文为大家分享了java实现简易计算器功能,具体内容如下 题目: 编写一个模拟计算器的程序.在面板中添加一个文本框(显示按键及运算结果). 10个数字按钮(0~9).4个运算按钮(加.减.乘.除).一个等号按钮.一个清除按钮, 要求将按键和结果显示在文本框中. 代码过程展示: import java.awt.Container; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.Action

  • java 简单的计算器程序实例代码

    java 简单的计算器程序 实现实例: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Calculator { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { CalculatorFrame frame = new Calculato

  • java模仿windows计算器示例

    这个计算器的界面模仿Windows自带的简易计算器,包括交互界面和和对各种输入的响应.目前尚未实现菜单栏和记忆类按钮的功能 复制代码 代码如下: import java.awt.Color;import java.awt.Container;import java.awt.GridLayout;import java.awt.Insets;import java.awt.event.ActionEvent;import java.awt.event.ActionListener; import

  • java实现计算器功能

    本文实例为大家分享了java实现计算器功能具体代码,供大家参考,具体内容如下 效果图 组成结构 从结构上来说,一个简单的图形界面,需要由界面组件.组件的事件监听器(响应各类事件的逻辑)和具体的事件处理逻辑组成. 界面实现的主要工作是创建各个界面组件对象,对其进行初始化,以及控制各组件之间的层次关系和布局. 计算器代码结构 计算器java源码 1.定义变量和按钮 public class Calculator { // 定义成员变量,方便逻辑的实现 // 需要定义存储当前被按下的操作数和操作符,r

  • java图形界面AWT编写计算器

    一.前言 1)这个计算器是基于java语言下图形界面AWT编写的.其实我认为写这个计算器,实现什么功能不重要,市场也不缺这个计算器,而是在于对AWT中三大布局的及画板的使用简单控件的操作使用.通过联系熟悉掌握AWT基础为深入学习打下基础.这个计算器功能也十分简单,空有其表.不过有兴趣的话可以继续添加功能完善操作等. 2)使用平台:主要使用Myeclipse2014 3)主要知识点:java 基础; awt+swing 二.功能实现及代码展示 1)主要是layout布局的练习,对画板文本框的使用,

  • 使用jsp调用javabean实现超简单网页计算器示例

    以下是代码: Calculator.java 复制代码 代码如下: package com.amos.model; import java.math.BigDecimal; /** * @ClassName: Calculator * @Description: 计算器 * @author: amosli * @email:amosli@infomorrow.com * @date Mar 20, 2014 1:04:59 AM  */ public class Calculator {    

  • Java swing实现的计算器功能完整实例

    本文实例讲述了Java swing实现的计算器功能.分享给大家供大家参考,具体如下: package awtDemo; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.Vector; public class Calculator { String str1 = "0"; // 运算数1 初值一定为0 为了程序的安全 String str2 = "0"

  • Java实现计算器的代码

    用Java 实现的计算器,原理看代码注释,具体内容如下 public class MyCalculator { public static void main(String[] args) { String obj = "6+(8/2)+6/3+1*8 + 30"; ArrayList<String> arrayList = strFormat(obj); System.out.println(obj + "=" + calculator(arrayLi

  • java实现简单的计算器类实例

    本文实例讲述了java实现简单的计算器类.分享给大家供大家参考.具体如下: package chap; import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text

  • Java简易计算器程序设计

    编写一个模拟计算器的应用程序,使用面板和网格布局, 添加一个文本框,10个数字按钮(0~9),4个加减乘除按钮, 一个等号按钮,一个清除按钮,一个求平方根按钮,一个退格按钮, 要求将计算公式和结果显示在文本框中,实现效果如下图所示. Java简易计算器代码: import javax.swing.*; import javax.swing.JTextField; import java.awt.*; import java.awt.event.*; import java.lang.*; imp

随机推荐