`
追梦--
  • 浏览: 37116 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

用java可视化编程实现计算器

阅读更多
我们可以用java实现一个简单的计算器
我们把它分为两个java文件一、计算器窗体部分,二、按键事件处理器部分。经过多次测试,解决了绝大部分bug,也许还有一些bug未发现,欢迎指正。
下附计算器截图,有点丑,呵呵,但是是可以用的





一、计算器窗体部分

/*****************************************************************/
package cn.lantian.Jisuan;

import javax.swing.JButton;

public class Jisuan{
public static void main(String[] args){
Jisuan js =new Jisuan();
js.init();
}
public String[] a1={"ln","log10","exp","sqrt","abs",
         "sin","cos","tan","+","*",
         "7","8","9","-","/",
         "4","5","6",".","清除",
         "1","2","3","0","=",};
    public void init(){
       //实例化一个窗体容器
       javax.swing.JFrame frame=new javax.swing.JFrame();
       frame.setTitle("计算器");
       frame.setSize(380,390);
       //实例化一个流动布局类
       java.awt.FlowLayout f1=new java.awt.FlowLayout();
       frame.setLayout(f1);   
       //将整个计算器分为两部分,两个面板容器panel1,panel2
       //第一个面板容器
       javax.swing.JPanel panel1=new javax.swing.JPanel();
       //指定高度、宽度。除JFrame(setsize();)外,都用这个指定高宽
       panel1.setPreferredSize(new java.awt.Dimension(380,120));
       //实例化一个输入框
       javax.swing.JTextField jt=new javax.swing.JTextField();
       jt.setPreferredSize(new java.awt.Dimension(330,80));
       jt.setEditable(false);
       //设置输入数据从右边开始显示
       jt.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
       panel1.add(jt);
       //第二个面板容器
       javax.swing.JPanel panel2=new javax.swing.JPanel();
       //实例化网格布局(宽,高,水平间距,垂直间距)
       java.awt.GridLayout f2=new java.awt.GridLayout(5,5,5,12);
       panel2.setLayout(f2);
       //新建一个control类
       Control con =new Control(jt);

       //添加按键
       /***************************************/
       for (int i=0;i<25;i++){
       JButton jb = new JButton(a1[i]);
       panel2.add(jb);
       jb.addActionListener(con);
       }
      
       /**************************/

       //将两个面板添加到窗体
       frame.add(panel1);
       frame.add(panel2);
       //善后工作
       frame.setDefaultCloseOperation(2);
       frame.setLocationRelativeTo(null); //主窗体屏幕居中
       frame.setVisible(true);
    }
}
/******************************************************************/




二、按键事件处理器部分

/******************************************************************/
package cn.lantian.Jisuan;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JTextField;

public class Control implements ActionListener {
private String n1 = "";
private String n2 = "";
private String fa = "";
// t1用于判断第二个数输入清屏,
/*
* t2用于判断是否在输入第二个数完后继续使用运算符,继续使用为false 若继续使用,则运算结果(类似于等号+运算符)
*/
/*
* t3标记第二次是否输入数据,防止用户在没输入第二个数时,多次按加减乘除 造成多次运算
*/
private boolean t1 = true, t2 = true, t3 = false;
private JTextField jt;
private String c;

public Control(JTextField jt) {
this.jt = jt;
}

public void actionPerformed(ActionEvent e) {
c = e.getActionCommand();
switch (c) {
case ".":
case "0":
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
if (t1) {// 如果t1为真,则累加文本框中的数
jt.setText(jt.getText() + c);
} else {// 否则就清屏
jt.setText(c);
t1 = true;// 将t1设为真,让以后输入的数可以累加文本框中的内容
t3 = true;// 表明输入了第二个数,再输入运算符时可以进行运算
}
break;
case "+":
case "-":
if (jt.getText().equals("")){
jt.setText("-");
t1=true;
break;
}
case "*":
case "/":
if (t2) {// 如果不是继续运算
t1 = false;// 输入第二个数时的清屏标志
t2 = false;// 连续运算的标志
fa = c;
// 更改运算符
n1 = jt.getText();// 获取n1
t3 = false;
} else {// 若是连续运算
if (t3) {// 若两次按运算符期间输入了第二个数
n2 = jt.getText();
switch (fa) {// 根据运算符采取运算方法
case "+":
float temp1 = Float.parseFloat(n1)
+ Float.parseFloat(n2);
jt.setText("" + temp1);
break;
case "-":
float temp2 = Float.parseFloat(n1)
- Float.parseFloat(n2);
jt.setText("" + temp2);
break;
case "*":
float temp3 = Float.parseFloat(n1)
* Float.parseFloat(n2);
jt.setText("" + temp3);
break;
case "/":
float temp4 = Float.parseFloat(n1)
/ Float.parseFloat(n2);
jt.setText("" + temp4);
break;
}
fa = c;// 更改运算符
n1 = jt.getText();// 得到文本框上的数
t1 = false;// 下次输数可以清屏
t3 = false;// 将t3变为假,输入了第二个数,才变为真
} else {// 连续按运算符
fa = c;// 更改运算符
}
}
break;
case "=":
n2 = jt.getText();
if (n1 != "" && n2 != "" && fa != "" && t3)// t3为真,说明输入了第二个数
{// 如果合法,就执行等号
switch (fa) {
case "+":
float temp1 = Float.parseFloat(n1) + Float.parseFloat(n2);
jt.setText("" + temp1);
break;
case "-":
float temp2 = Float.parseFloat(n1) - Float.parseFloat(n2);
jt.setText("" + temp2);
break;
case "*":
float temp3 = Float.parseFloat(n1) * Float.parseFloat(n2);
jt.setText("" + temp3);
break;
case "/":
float temp4 = Float.parseFloat(n1) / Float.parseFloat(n2);
jt.setText("" + temp4);
break;
}
t1 = false;
t2 = true;
t3 = false;
fa = "";
n2 = "";// 将这两个值赋为空,防止数据记忆影响到后面的数据
}
break;
case "清除":
// 清屏并将所有标志变为初值
jt.setText("");
t2 = true;
t1 = true;
t3 = false;
n1 = "";
n2 = "";
fa = "";
break;
case "sin":
if (jt.getText() != "") {
jt.setText("" + Math.sin(Float.parseFloat(jt.getText())));
t1 = false;
}
break;
case "cos":
if (jt.getText() != "") {
jt.setText("" + Math.cos(Float.parseFloat(jt.getText())));
t1 = false;
}
break;
case "tan":
if (!jt.getText().equals("")) {
jt.setText("" + Math.tan(Float.parseFloat(jt.getText())));
t1 = false;
}
break;
case "ln":
if (!jt.getText().equals("")) {
jt.setText("" + Math.log(Float.parseFloat(jt.getText())));
t1 = false;
}
break;
case "log10":
if (!jt.getText().equals("")) {
jt.setText("" + Math.log10(Float.parseFloat(jt.getText())));
t1 = false;
}
break;
case "exp":
if (!jt.getText().equals("")) {
jt.setText("" + Math.exp(Float.parseFloat(jt.getText())));
t1 = false;
}
break;
case "abs":
if (!jt.getText().equals("")) {
jt.setText("" + Math.abs(Float.parseFloat(jt.getText())));
t1 = false;
}
break;
case "sqrt":
if (!jt.getText().equals("")) {
jt.setText("" + Math.sqrt(Float.parseFloat(jt.getText())));
t1 = false;
}
break;
}
}
}
  • 大小: 25 KB
分享到:
评论

相关推荐

    可视化编程计算器

    可视化计算器,利用java所写的.如果是广工的学生更好,里面有老师所有的要求。

    Java编写可视化计算器

    Java语言编写的计算器,有可视化界面,比windows自带的功能强大,而且支持大中小括号的运算。

    Java 可视化界面版计算器程序 文档.rar

    Java 制作实现的UI可视化界面版数学计算器源代码,另附编程文档,本计算器可以进行常用的加减乘除算术运算。本实例的知识点有:窗口布局器GridLayout的应用,对按钮消息的监听和响应 。运行方法:本实例代码编写完毕...

    calculator_java实现计算器_

    带有可视化界面的简易计算器(1) 计算器应包含功能有:显示当前的输入/运算结果、键入0~9十个数字、10000以内的整数加减乘法、计算结果(=)、清空(C)。(2) 不需要实现混合运算功能,即键入类似“XXXPYY=”后显示...

    计算器的设计与实现.zip

    使用可视化编程环境下编写一个简易的计算器,能实现简单的加、减、乘、除四则运算,并加入特定的一些效果,如使计算器的颜色在红色,绿色和蓝色之间轮流变换等。完成诸如计算器对话框的创建、控件编辑、界面设计、...

    java实现计算器的功能

    本程序使用java在eclipse环境下实现了计算器的功能

    Java语言程序设计实验指导书

    Java语言程序设计实验指导书 理论教材:《Java程序设计标准教程》 第1版 邱加永 人民邮电...9 图形用户界面 用图形界面工具,结合事件处理机制,实现一个可视化的计算器。 10 JDBC基础 使用JDBC方式执行数据库基本操作

    java源码包实例源码JAVA开发源码50个合集.zip

    基于BS结构的Java可视化工作流定制软件.rar 基于J2ME的Java游戏梦幻炸弹人源程序.rar 基于JAVA的ICQ系统.rar 基于Java的mp3播放器源代码.rar 基于Java的小型人事管理系统,带数据库.rar 基于JAVA的日程提醒簿.rar ...

    javaCalculator_java_politicalut5_

    Java 制作实现的UI可视化界面版数学计算器源代码,另附编程文档

    VC与Labview、Matlab编程论文资料[2].rar

    Java可视化集成开发环境的研究与实现.pdf Java调用VC_DLL实现串口GPS的访问.pdf LabVIEW_快速构建步进电机控制系统的利器.pdf LabVIEW下普通数据采集卡的驱动与调用.pdf LabVIEW下远程虚拟实验室的研究与实现....

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    VC与Labview、Matlab编程论文资料

    Java可视化集成开发环境的研究与实现.pdf Java调用VC_DLL实现串口GPS的访问.pdf LabVIEW_快速构建步进电机控制系统的利器.pdf LabVIEW下普通数据采集卡的驱动与调用.pdf LabVIEW下远程虚拟实验室的研究与实现....

    VC与Labview、Matlab编程论文资料[4].rar

    Java可视化集成开发环境的研究与实现.pdf Java调用VC_DLL实现串口GPS的访问.pdf LabVIEW_快速构建步进电机控制系统的利器.pdf LabVIEW下普通数据采集卡的驱动与调用.pdf LabVIEW下远程虚拟实验室的研究与实现....

Global site tag (gtag.js) - Google Analytics