【JAVA】可视化计算器
import java.awt.Color; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class Demo { // 窗体对象 private static JFrame frame = null; // 面板对象 private static JPanel pan1 = null; private static JPanel pan2 = null; private static JPanel pan3 = null; private static JPanel pan4 = null; private static JPanel pan5 = null; // 字体对象 private static Font font = new Font("楷体", Font.BOLD, 18); private static Font font1 = new Font("楷体", Font.BOLD, 28); // 创建一个单行文本框 private static JTextField result = new JTextField(); //事件对象 private static MyActionListener mal = new MyActionListener(result); static { // 初始化窗体。 frame = new JFrame("计算器"); // 表格布局7*3,水平和垂直间距为3 frame.setLayout(new GridLayout(6, 3, 3, 3)); // 设置关闭按钮 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 显示窗体 frame.setVisible(true); // 大小固定 frame.setResizable(false); // 设置窗体大小以内容大小决定 frame.pack(); // 设置文本框字体 result.setFont(font1); // 设置颜色 result.setDisabledTextColor(new Color(000000)); // 禁用 result.disable(); // 添加单行文本框到窗体 frame.add(result); // 创建pan1面板容器,指定为表格布局,1*4,水平垂直间距为3 JPanel pan1 = new JPanel(new GridLayout(1, 4, 3, 3)); // 创建pan2面板容器,指定为表格布局,1*4,水平垂直间距为3 JPanel pan2 = new JPanel(new GridLayout(1, 4, 3, 3)); // 创建pan3面板容器,指定为表格布局,1*4,水平垂直间距为3 JPanel pan3 = new JPanel(new GridLayout(1, 4, 3, 3)); // 创建pan4面板容器,指定为表格布局,1*4,水平垂直间距为3 JPanel pan4 = new JPanel(new GridLayout(1, 4, 3, 3)); // 创建pan4面板容器,指定为表格布局,1*4,水平垂直间距为3 JPanel pan5 = new JPanel(new GridLayout(1, 4, 3, 3)); // 定义数组str3数组,并初始化 String str1[] = {"1", "2", "3", "+" }; JButton btn1 = null; for (int i = 0; i < str1.length; i++) { btn1 = new JButton("" + str1[i]); // 添加事件 btn1.addActionListener(mal); // 设置按钮字体 btn1.setFont(font); // 把数组中的按钮添加到pan3容器中 pan1.add(btn1); } // 定义数组str2数组,并初始化 String str2[] = {"4", "5", "6", "-" }; // 创建按钮模型 JButton btn2 = null; for (int i = 0; i < str2.length; i++) { btn2 = new JButton("" + str2[i]); // 添加事件 btn2.addActionListener(mal); // 设置按钮字体 btn2.setFont(font); // 把数组中的按钮添加到pan2容器中 pan2.add(btn2); } // 定义一个str3数组,并初始化 String str3[] = {"7", "8", "9", "*", }; // 创建一个空按钮模型btn3 JButton btn3 = null; for (int i = 0; i < str3.length; i++) { btn3 = new JButton("" + str3[i]); // 添加事件 btn3.addActionListener(mal); // 设置按钮字体 btn3.setFont(font); // 利用循环逐个添加到pan1面板容器中 pan3.add(btn3); } // 定义数组str4数组,并初始化 String str4[] = {"0", "清空", "退格", "/" }; JButton btn4 = null; for (int i = 0; i < str4.length; i++) { btn4 = new JButton("" + str4[i]); // 添加事件 btn4.addActionListener(mal); // 设置按钮字体 btn4.setFont(font); // 把数组中的按钮添加到pan4容器中 pan4.add(btn4); } // 定义数组str5数组,并初始化 String str5[] = {".", "=" }; JButton btn5 = null; for (int i = 0; i < str5.length; i++) { btn5 = new JButton("" + str5[i]); // 添加事件 btn5.addActionListener(mal); // 设置按钮字体 btn5.setFont(font); // 把数组中的按钮添加到pan4容器中 pan5.add(btn5); } // 添加pan1容器到窗体中 frame.add(pan1); // 添加pan2容器到窗体中 frame.add(pan2); // 添加pan3容器到窗体中 frame.add(pan3); // 添加pan4容器到窗体中 frame.add(pan4); // 添加pan5容器到窗体中 frame.add(pan5); } public static void main(String[] args) { /** * 这里我不知道为什么,放在静态代码块中窗口大小就是无效设置。 */ // 窗口大小 frame.setSize(350, 480); } } class MyActionListener implements ActionListener { // 上面类中的结果显示面板。 JTextField result; // 对应结果显示面板中的显示内容。 String show = ""; // 构造方法,创建对象的时候需要传入,显示面板。 public MyActionListener(JTextField result) { super(); this.result = result; } // 监听方法 @Override public void actionPerformed(ActionEvent e) { // 获取事件源。 JButton btn = (JButton) e.getSource(); // 获取事件源的文本信息。 String text = btn.getText(); switch (text) { case "清空": // 清空操作。 show = ""; result.setText(show); break; case "退格": // 退格操作。 if (result.getText().length() != 0) { show = show.substring(0, show.length() - 1); result.setText(show); } break; default: // 如果用户第一个输入的不是数字,就不让输入. if (result.getText().length() == 0 && text.equals("+")) { return; } if (result.getText().length() == 0 && text.equals("-")) { return; } if (result.getText().length() == 0 && text.equals("*")) { return; } if (result.getText().length() == 0 && text.equals("/")) { return; } if (result.getText().length() == 0 && text.equals(".")) { return; } if (result.getText().length() == 0 && text.equals("=")) { return; } if (result.getText().length() == 0 && text.equals("0")) { return; } // 如果第二次输入的内容和第一次输入一样都是非数字,就不让输入。 if (show.length() != 0) { String substring = show.substring(show.length() - 1); if (substring.equals("+") || substring.equals("-") || substring.equals("*") || substring.equals("/") || substring.equals(".")) { if (text.equals("+") || text.equals("-") || text.equals("*") || text.equals("/") || text.equals(".")) { return; } } } // 如果输入的是 等于号,就调用方法,获取表达式的正确结果。 if (text.equals("=")) { show = execute(show); // 将结果设置到 结果显示面板上。 result.setText(show); return; } // 否则就继续添加表达式。 else { show += text; result.setText(show); } break; } } // 表達式的結果处理。 public String execute(String ex) { // 使用JS的eval方法计算表达式的结果。 // 获取JavaScript执行引擎 ScriptEngineManager m = new ScriptEngineManager(); // 执行JavaScript代码 ScriptEngine engine = m.getEngineByName("JavaScript"); Object rs = null; try { rs = engine.eval(ex); } catch (ScriptException e) { e.printStackTrace(); } // 当用户除以0 时, 结果为:Infinity 这里当除以0时,正确结果应该是:0 if (rs.toString().equals("Infinity")) { return "0"; } else { return rs.toString(); } } }
【JAVA】可视化计算器的更多相关文章
- Java可视化计算器
利用java中的AWT和SWING包来做可视化界面. 首先来简单了解一下这两个包: AWT和Swing都是Java中用来做可视化界面的.AWT(Abstract Window Toolkit):抽象窗 ...
- JAVA 可视化分析工具 第12节
JAVA 可视化分析工具 第12节 经过前几章对堆内存以及垃圾收集机制的学习,相信小伙伴们已经建立了一套比较完整的理论体系!那么这章我们就根据已有的理论知识,通过可视化工具来实践一番. 我们今天要讲 ...
- [java] 可视化日历的实现(基于Calendar类 )
写在前面 博文安排顺序如下 1.写在前面 2.源码 3.思路 4.相关知识 该小程序是对Date类及其相关类的复习 要求如下图:实现可视化日历 实现思路 1.先从键盘输入指定格式的字符串(str)2. ...
- java简单计算器
写的一个小计算器,留着以后看吧. import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; import ...
- Java可视化AWT
AWT 总体上Swing组件替代了绝大部分AWT组件,对AWT图形用户界面编程有极好的补充和加强. package ch11; import java.awt.*; /** * Created by ...
- java 学习 ——计算器小程序
简易计算器小程序代码: package jisuanqi; //声明须要插入的包 import java.awt.*; import java.lang.Object; import java.lan ...
- 【java图形计算器】 java awt swing组件应用
package package1; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swi ...
- Java可视化日历(Date类、DATe Format类、Calendar类综合运用),开发可视化日历小程序
Java时间日期类综合运用,开发可视化日历小程序 由键盘输入指定格式的日期,打印这个月的日历 1.代码 import java.text.DateFormat; import java.text.Pa ...
- Java可视化编程---SendMail工具的开发
介绍: SendMail是一款简便的163邮箱发件工具 利用了163的SMTP接口来发送邮件 版本号:SendMail v1.0 在编写发送邮件工具之前,还需要安装 JavaMail API 和Jav ...
随机推荐
- Django之使用celery和NGINX生成静态页面实现性能优化
性能优化原理: 当我们要给client浏览器返回一个页面时,我们需要去数据库查询数据并将数据和基本页面模板渲染形成页面返回给客户端,但如果每一个用户访问时都去查询一次首页的的数据时,当日访问量很大时那 ...
- wordpress新注册用户或重置密码链接失效
在网上找了好多个博客,一个比一个不要脸,要更改的是两个文件,最后都抄成一个文件了. 原文链接https://www.cnblogs.com/liudecai/p/6474611.html 我是按照这个 ...
- VR中的“寻路(wayfinding)”
虚拟现实(VR)中很重要的一个问题就是Locomotion(用户在VR中的移动).这个Locomotion分为两种,一种是点对点的,如传送门的方式,一种是包含了可以操控的中间过程的,这种被称为“导航( ...
- MySQL数据库从复制及企业配置实践
在实际生产中,数据的重要性不言而喻: 如果我们的数据库只有一台服务器,那么很容易产生单点故障的问题,比如这台服务器访问压力过大而没有响应或者奔溃,那么服务就不可用了,再比如这台服务器的硬盘坏了,那么整 ...
- MongoDB 学习笔记之 WriteConcern
WriteConcern: 转载:MongoDB WriteConcern(写关注)机制 http://www.ywnds.com/?p=3688&viewuser=40 MongoDB部署模 ...
- asp.net core刷新css缓存
在非spa程序开发的时候.css经常会因为浏览器的缓存机制导致不刷新. 很多前端为了应对这个问题,都会引入webpack或者gulp等工具来处理css缓存的问题. 但是作为一个偏服务器端的程序员来说. ...
- C# 8 - Range 和 Index(范围和索引)
C# 7 的 Span C# 7 里面出现了Span这个数据类型,它可以表示另一个数据结构里连续相邻的一串数据,并且它是内存安全的. 例子: 这个图的输出是3,4,5,6. C# 8 的Range类型 ...
- 二次函数,为什么a>0就可以知道开口向上.
最近自考. 学习高等数学. 学习高等数学过程中发现高中数学不会,,于是乎开始补高中数学. 学习高中数学过程中又发现初中数学有的不会,,于是乎开始补初中数学.. 可怕(→_→). 今天遇到一个二次函数, ...
- css父元素透明度(opacity)对子元素的影响
首先子元素会继承父元素的透明度: 设置父元素opacity:0.5,子元素不设置opacity,子元素会受到父元素opacity的影响,也会有0.5的透明度. 其次子元素的透明度是基于父元素的透明度计 ...
- Java 语言的发展史
维基百科引入 早期的Java 语言最开始只是Sun计算机(Sun MicroSystems)公司在1990年12月开始研究的一个内部项目.Sun计算机公司的一个叫做帕特里克·诺顿的工程师被公司自己开发 ...