【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 ...
随机推荐
- 夯实Java基础系列12:深入理解Java中的反射机制
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- kubernetes垃圾回收器GarbageCollector Controller源码分析(二)
kubernetes版本:1.13.2 接上一节:kubernetes垃圾回收器GarbageCollector Controller源码分析(一) 主要步骤 GarbageCollector Con ...
- 设计模式---结构型模式之适配器模式(Adapter Pattern)
适配器模式定义 将一个类的接口,转换成客户期望的另外一个接口.适配器让原本接口不兼容的类可以合作无间. 适配器模式主要有两种类型:对象适配器和类适配器. 在详细解释这两种类型时,解释部分重要角色.生活 ...
- 云计算之走进LINUX(一)
引言 小比特的随笔: 亲爱的博友所有随笔部分记录的是小比特的一些学习笔记,阅读性不是太强仅供有基础的博友参考,对小白来说阅读起来可能会有些吃力.当然也可以参考啦!小比特将在文章部分提供详细的内容介绍供 ...
- linux上安装LAMP笔记
B哥最近在参加比赛,需要把一个php项目部署到服务器上,故此在linux上安装LAMP环境,用于部署项目,第一次安装,做点儿笔记记录一下. 安装条件: Redhat或者CentOS linux环境已装 ...
- Pandas处理日常EXCEL表格的便捷操作
第一次写博客,写的可能有点乱,有问题可以一起探讨.格式可能控制也不是太好. 1.日常的数据集大多带有中文格式,例如“公务员招聘岗位汇总.xls”.我们使用pandas的read_csv()函数读取可能 ...
- 计算机网络知识点总结2:IP协议(IPV4)
一.Internet网络是一种数据报网络(另一种是虚电路网络,用于ATM等),主要功能是路由和转发. 二.IP数据报(分组)格式(IPV4版本) 首部 描述 版本号(4bit) 描述IP协议的版本号, ...
- 像艺术家一样思考 Think Like an Artist
艺术家是如何获得灵感,如何找到自己的独特风格和主题的? 艺术家在绘画.写作.表演或歌唱前不会去征求谁的允许,而是随心而行 要想在数字时代获得满足感,我们需要变得有创造性 1.艺术家富有事业心 艺术家是 ...
- RF分层封装
1.如何管理用例? (1).在ride工具中分层管理用例(案例层.元素层.流程层),提高效率 (2).偶尔运行下,保证脚本能正常跑动 2.用例分层操作 案例层:需要加载流程层.txt资源和Seleni ...
- 通过反射对任意class类中方法赋值的方式
import org.apache.commons.lang3.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;i ...