flex实现简单计算机程序,Macromedia Flex 制作计算器源码和制作步骤

2023-10-27

这个计算器是由两个部分组成:一个前台界面的MXML文件,一个后台控制器的AS文件。mxml文件负责显示计算器的界面,as文件负责处理用户发送的信息并计算结果。在这个教程中我们主要学习:

[list]The Application class

The Panel container

The Label element

The Grid container

The Button element[/list]

ActionScript的主要学习内容:

[list]A class definition

Properties

Methods

The if-else and switch-case control structures[/list]

==================== 创 建 界 面 ====================

创建一个空白的mxml文件,保存为calculator.mxml,一个符合标准的flex文件必须加入MX的类库

xmlns:mx="http://www.macromedia.com/2003/mxml

因此,在calculator.mxml写入下面的代码:

==================== 创 建 主 面 板 ====================

计算器中所有的按钮都集中在Panel元素中,因此我们首先要创建一个Panel面板,

并设置它的tittle属性为:Calculator

在Application区域添加:

==================== 创 建 计 算 器 显 示 屏 ====================

显示屏其实是一个Label元素,它能够显示一行文字,Label元素有许多的属性,在这里,我们使用一下集中属性:

[list]id: Label的标识,类似Flash中的Instance Name

width: Label的宽度,单位:象素

text: Label的内容

textAlign: 对齐方式: left | right | center [/list]

在Panel区域中添加如下代码:

注意:在这里我们并没有设置Label的text属性,因为我们过会要通过后台程序动态显示Label标签的内容

==================== 创 建 Grid ====================

Grid好比是Flex的排版工具,类似与HTML中的表格,只有Grid确定下来,我们才能对整个flex程序中的各种元素进行定位

Grid标签由三个元素组成:

[list]Grid: 类似HTML中的

GridRow: 类似HTML中的

标签

GridItem: 类似HTML中的

标签[/list]

在这里我们添加一个5行4列的Grid,其中第一行和最后一行为三列,代码如下:

Grid添加好后的效果为:

20049622364460192.png

==================== 添 加 计 算 器 按 钮 ====================

Flex的Button控件也类似于HTML的按钮,在这里我们将使用按钮的三种属性:

[list]label: 按钮上显示的文字

width: 按钮宽度

click: 按钮按下时所响应的事件[/list]

在Flex中每一个button控件都有相同的格式:

在我们上面制作的18个GridItem中依次添加1、2、3、4、5、6、7、8、9、0、.、+、-、*、/、=、Clear、C/E这些按钮,如下:

Row1

width="70"

label="Clear"

click="calcController.clearAll()"

width="30"

label="C/E"

click="calcController.clearEntry()"

width="30"

label="+"

click="calcController.setOperation('add')"

Row2

width="30"

label="1"

click="calcController.addNumber('1')"

width="30"

label="2"

click="calcController.addNumber('2')"

width="30"

label="3"

click="calcController.addNumber('3')"

width="30"

label="-"

click="calcController.setOperation('subtract')"

Row3

width="30"

label="4"

click="calcController.addNumber('4')"

width="30"

label="5"

click="calcController.addNumber('5')"

width="30"

label="6"

click="calcController.addNumber('6')"

width="30"

label="*"

click="calcController.setOperation('multiply')"

Row4

width="30"

label="7"

click="calcController.addNumber('7')"

width="30"

label="8"

click="calcController.addNumber('8')"

width="30"

label="9"

click="calcController.addNumber('9')"

width="30"

label="/"

click="calcController.setOperation('divide')"

Row5

width="30"

label="0"

click="calcController.addNumber('0')"

width="30"

label="."

click="calcController.addNumber('.')"

width="70"

label="="

click="calcController.doOperation()"

完成后保存文件,添加好button后的效果如下:

20049622555798708.png

==================== 创 建 后 台 程 序 ====================

新建一个as文件,另存为 CalculatorController.as

先创建一个CalculatorController的类:

class CalculatorController

{}

然后创建一个构造器

public function CalculatorController(){}

在CalculatorController中声明以下变量:

public var calcView:Object;

private var reg1:String="";

private var reg2:String="";

private var result:Number;

private var currentRegister:String="reg1";

private var operation:String="none";

private var r1:Number;

private var r2:Number;

接着添加功能模块:

“等于”的功能 doOperation()

public function doOperation():Void

{

r1=Number(reg1);

r2=Number(reg2);

switch (operation)

{

case "add":

result=r1+r2;

resetAfterOp();

break;

case "subtract":

result=r1-r2;

resetAfterOp();

break;

case "multiply":

result=r1*r2;

resetAfterOp();

break;

case "divide":

result=r1/r2;

resetAfterOp();

break;

default:

//do nothing

}

}

输入数字的功能 addNumber()

public function addNumber(n:String):Void

{

if (operation=="none" && currentRegister=="reg2")

{

reg1="";

setCurrentRegister();

}

this[currentRegister]+=n;

setDisplay(currentRegister);

}

“C/E”的功能 clearEntry()

public function clearEntry():Void

{

this[currentRegister]="";

setDisplay(currentRegister);

}

“Clear”的功能 clearAll()

public function clearAll():Void

{

reg1="";

reg2="";

setCurrentRegister();

setOperation("none");

setDisplay(currentRegister);

}

“加、减、乘、除” 的功能 setOperation()

public function setOperation(operation:String):Void

{

this.operation=operation;

setCurrentRegister();

}

显示屏的功能 setDisplay()

private function setDisplay(register:String):Void

{

calcView.calcDisplay.text = this[register];

}

其他

private function setCurrentRegister():Void

{

if (reg1=="")

{

currentRegister="reg1";

}

else

{

currentRegister="reg2";

}

}

private function resetAfterOp():Void

{

reg1=String(result);

reg2="";

setDisplay("reg1");

setOperation("none");

}

==================== 最 终 完 整 的 代 码 ====================

calculator.mxml

CalculatorController.as

/*

Calculator Controller

*/

class CalculatorController

{

// properties

// object to hold a reference to the view object

public var calcView:Object;

// registers to hold temporary values pending operation

private var reg1:String="";

private var reg2:String="";

// result of an operation

private var result:Number;

// the name of the register currently used

private var currentRegister:String="reg1";

// the name of the next operation to be performed

private var operation:String="none";

// for convenience, holder for numerical equivalents

// of the register string values

private var r1:Number;

private var r2:Number;

// constructor

public function CalculatorController()

{}

// methods

// perform the current operation on the 2 registers

public function doOperation():Void

{

// cast the register values to numbers

r1=Number(reg1);

r2=Number(reg2);

switch (operation)

{

case "add":

result=r1+r2;

resetAfterOp();

break;

case "subtract":

result=r1-r2;

resetAfterOp();

break;

case "multiply":

result=r1*r2;

resetAfterOp();

break;

case "divide":

result=r1/r2;

resetAfterOp();

break;

default:

// do nothing

}

}

// concatenate number to the value of the current register

public function addNumber(n:String):Void

{

if (operation=="none" && currentRegister=="reg2")

{

reg1="";

setCurrentRegister();

}

this[currentRegister]+=n;

setDisplay(currentRegister);

}

// clear the current register

public function clearEntry():Void

{

this[currentRegister]="";

setDisplay(currentRegister);

}

// clear both registers and the current operation

public function clearAll():Void

{

reg1="";

reg2="";

setCurrentRegister();

setOperation("none");

setDisplay(currentRegister);

}

// set the current operation

public function setOperation(operation:String):Void

{

this.operation=operation;

setCurrentRegister();

}

// set the value shown in the display

private function setDisplay(register:String):Void

{

calcView.calcDisplay.text = this[register];

}

// set which register is current

private function setCurrentRegister():Void

{

if (reg1=="")

{

currentRegister="reg1";

}

else

{

currentRegister="reg2";

}

}

// reset values after an operation

private function resetAfterOp():Void

{

reg1=String(result);

reg2="";

setDisplay("reg1");

setOperation("none");

}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flex实现简单计算机程序,Macromedia Flex 制作计算器源码和制作步骤 的相关文章

  • 《算法零基础100讲》 变量交换算法

    题目1 题目链接 int swapNumbers int numbers int numbersSize int returnSize numbers 0 numbers 0 numbers 1 numbers 1 numbers 0 nu
  • (已解决)pytorch错误:RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED (安装cuda)

    RuntimeError cuDNN error CUDNN STATUS EXECUTION FAILED 原因 pytorch与cuda版本不对 也有可能是内存空间不足 可以更改虚拟空间大小 先卸载了pytorch conda unin
  • Ant Design Pro使用操作说明--(1) 搭建项目

    Antdpro Umi Dva 创建项目 之前的umi dva antd那套博客蛮多人看并且有互动 一套详细的全新升级antdpro管理系统的搭建和使用希望可以帮助到各位 这次会细分 尽量帮助你们快速解决遇到的问题 一 Ant Design
  • JS/JQ实现字符串加密成 HEX(十六进制) 字符串

    应用场景 1 数据传输 在网络通信或数据存储中 将字符串转换为十六进制格式可以确保数据的可靠传输和存储 十六进制字符串只包含数字和字母 而不涉及控制字符或其他特殊字符 因此避免了特殊字符在传输过程中引起的问题 2 数据校验 十六进制字符串可
  • (ESP32学习7)双核使用队列进行任务间通信

    这里是调用双核的方法哈 和我们单核使用的方法不兼容 因为有一些函数是不一样的 不通用 但是下一篇博文我会更一篇单核使用队列进行任务间通讯的问题 队列是什么 队列是可以从一个任务向其他任务以并发安全的方式发送消息的机制 也就是说他的目标是实现
  • C语言各变量类型占字节数

    C语言变量所占字节数整理 变量的基本类型包括 字符型 整型 长整型 浮点型 每个变量在每个编译器所占的字节数不同 the C Programming language 是这样说的 Each compiler is free to choos
  • c++11新特性实战:智能指针

    c 11添加了新的智能指针 unique ptr shared ptr和weak ptr 同时也将auto ptr置为废弃 deprecated 但是在实际的使用过程中 很多人都会有这样的问题 不知道三种智能指针的具体使用场景 无脑只使用s
  • 【kali换源后报错:The repository ‘http://old.kali.org/kali moto InRelease‘ is not signed.的解决办法】

    问题描述 添加旧源 vim etc apt sources list 末行追加 deb http old kali org kali moto main non free contrib 更新源 apt get update 报错 Err
  • python,Pycharm导入自定义包

    1 Pycharm中如何让导入的自定义包生效 第一步 File gt Settsing gt Build Executions Deployment gt Console gt Python Console gt 勾选 add source
  • Android——使用Spinner实现下拉列表

    1 执行步骤 1 确定数据源 添加一个下拉列表项的list 2 定义适配器 添加数据源 为下拉列表定义一个数组适配器ArrayAdapter 3 为适配器设置下拉时的菜单样式 adapter setDropDownViewResource
  • 【Python项目】简易的密码本

    import json 名称文件 名称 json 账号文件 账号 json 密码文件 密码 json 名称 账号 密码 序列号 0 更新数据 with open 账号文件 as f 账号 json load f with open 名称文件
  • js代替eval的办法

    在滚滚的boring写代码的潮流中 eval 方法逐渐被淘汰 那我们可以用什么方法代替它呢 binggo 以下方法使用效果超出你的想象 function evalPro str var Fn Function return new Fn r
  • layui框架学习(5:面板)

    Layui中的菜单样式与面板结合比较紧密 在学习菜单之前 先熟悉Layui的面板样式 Layui的面板主要作为容器使用 其样式主要分为常规面板 卡片面板 折叠面板 含手风琴效果 Layui官网示例中还介绍了面板嵌套 本文后续一一介绍并验证
  • 图像描述算法排位赛:SceneXplain与MiniGPT-4谁将夺得桂冠?

    如果你对 AI 前沿感兴趣 本场 图像描述算法排位赛 绝对是你不能错过的 在这场较量中 SceneXplain 和 MiniGPT 4 将会比试 谁将摘得这场比赛的桂冠 直接上手体验 scenex jina ai 背景介绍 在 一张图就是一
  • php curl集成包的安装和实用

    下载curl集成包 https github com php mod curl 放在vendor目录下 加载curl包 实例化 vendor Curl src Curl Curl php pinJ new Curl 然后按照官网demo使用
  • 图像配准的方法

    转自 http blog sina com cn s blog 4b9b714a0100d5k5 html 图像配准的方法 1 基于特征的图像配准 基于特征的图像配准首先提取图像信息的特征 然后以这些特征为模型进行配准 特征提取的结果是一含
  • QT的ui文件中控件在cpp的调用

    点击然后右键 然后点击改变对象名称 改成如上图所示 即可在cpp函数中调用 进行操作
  • cdn搭建原理_什么叫cdn服务器?怎么部署?

    在现今的网络系统时期 各类互连网手机app异军突起 而互联网出現浏览卡屏或延时的状况也越来越非常广泛 以便处理不一样的互联网情况 人们常常会构建到不一样的虚拟主机来浏览互联网 cdn服务器也是列举这种 什么叫cdn服务器 cdn服务器英语全
  • CentOS7.x安装VNC实录

    不知不觉 centos已经到7 6了 在服务器操作系统中 centos是用的比较多的 占很大的比例 由于7 x版本和6 x版本有区别 最近安装了7 6的VNC 特记之 VNC需要系统安装的有桌面 如果是生产环境服务器 安装时使用的最小化安装

随机推荐

  • 学妹问我:OpenJDK是什么?作为师哥,必须万字详解屁颠屁颠奉上

    上一篇是分享的是 JVM虚拟机 了解Java堆中对象分配 布局和访问的全过程 这篇给大家分享 OpenJDK 1 OpenJDK 概述 OpenJDK 是 Java 平台标准版 Java SE 的免费开源实现 这是 Sun Microsys
  • python爬虫安装Xpath插件时遇到的问题

    在安装Xpath时 出现拖拉压缩包 记住一定是压缩包 下载后的插件是 crx后缀的文件 需要改变为压缩包的形式 后 在添加文件时 一直找不到压缩包 最后发现是压缩包后缀的问题 如图 是我的winr 压缩包软件 自动生成的压缩包 默认是rar
  • 数据聚合与分组运算

    标注 我用的是jupyterNotebook 一 分组与聚合的原理 在Pandas中 分组是指使用特定的条件将原数据划分为多个组 聚合在这里指的是 对每个分组中的数据执行某些操作 最后将计算的结果进行整合 分组与聚合的过程大概分为以下三步
  • nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet

    问题描述 这个报错指的是结果无法映射 只需要把java实体与数据库表关系映射好就ok 一定要看清自己的配置文件 自己的数据库 处理思路整理 避免走弯路 1 首先验证是不是代码写出 String sql select count 1 from
  • Spring中@Autowired注解用法详解

    1 概述 Spring中IOC可以通过注解方式实现 只要在spring的配置文件applicationContext xml中配置开启了包扫描Spring会自动扫描指定包及其子孙包
  • 【Python三大结构练习2】

    目录 1 数字金额转换为中文大写金额 2 恺撒密码 3 大小写转换 1 数字金额转换为中文大写金额 描述 编写一函数 将数字金额转换为中文大写金额 设最高位考虑到亿 最低位考虑到分 如 数字金额为1023 445 转换为中文大写金额为 壹仟
  • tp6整合腾讯云cos上传

    1 创建一个名为 composer json的文件 内容如下 require qcloud cos sdk v5 gt 2 0 2 执行以下命令 使用 Composer 安装 php composer update 3 复制代码 我这里目录
  • Qt编写并且调用外部动态库(dll)

    一 利用Qt编写一个简单的动态库 利用Qt编写一个简单的动态库 里面含有加 减 乘 除四个函数接口 1 打开Qt 新建一个项目 选择Library C 库 然后点击确认 2 选择共享库 写入项目名称 我这里命名为 QtMathDLL 选择项
  • Java 多线程批量操作中如何做事务控制?

    老汉聊技术 2023 04 11 12 43 发表于四川 收录于合集 java42个 编程63个 上方蓝色 老汉聊技术 选择 设为星标 前言 公司业务中遇到一个需求 需要同时修改最多约5万条数据 而且还不支持批量或异步修改操作 于是只能写个
  • 启动Redis报错:Could not create Server TCP listening socket *:6379: bind: Address already in use–解决办法

    最后一句提示 6379地址已经在使用 6379是redis默认的端口 如图我自己输入指令 redis server 显示Redis已经开启服务 1 正常解决方法三部 通过指令找到redis进程 查看所有关于它的进程详情 ps ef grep
  • Harbor-私有docker仓库离线安装配置

    因为工作需要 有时候是需要完全断网环境 此时需要在内网环境中离线安装Harbor私有仓库 1 系统环境描述 主机 X86 64架构 8G内存 期待啥时候等有机会找一台国产化机器安装一个其他架构的版本 操作系统 CentOS 7 9 2009
  • Python爬虫进阶:实战案例与技巧详解

    导言 Python作为一种强大的编程语言 在网络爬虫开发中发挥着重要作用 除了基本的爬虫技巧外 还有许多高级的爬虫技术可以帮助我们更好地获取和处理数据 本篇文章将结合实际案例 介绍Python爬虫的进阶技巧 并提供相应的代码示例 帮助读者深
  • 练习一、用JS语言计算两点之间距离功能

    功能描述 在界面建立4个数字输入框分别代表两点的横坐标 纵坐标 点击按钮并计算出相应的距离 主要考点 熟悉math对象中开根号math sqrt 数值 与平方math pow 数值 次幂 框架 elementui 相关代码
  • Netty学习——整体架构

    Netty 整体结构 Netty 是一个设计非常用心的网络基础组件 Netty 官网给出了有关 Netty 的整体功能模块结构 却没有其他更多的解释 从图中 我们可以清晰地看出 Netty 结构一共分为三个模块 Core 核心层 Core
  • Coverity介绍以及典型缺陷说明

    Coverity概述 Coverity公司是由一流的斯坦福大学的科学家于2002年成立的 产品核心技术是1998年至2002年在斯坦福大学计算机系统实验室开发的 用于解决一个计算机科学领域最困难的问题 在2003年发布了第一个能够帮助Lin
  • 一元多项式相加可实现代码数据结构(C语言)

    一元多项式相加可实现代码 c语言 数据结构 C语言版 书上是伪代码 经过不断修改调试 写下可实现的C语言源代码 创建文件 分为两部分 头文件 Poly h 和源文件 Poly c 一 实验目的 1 了解一元多项式的表示 2 实现一元多项式的
  • python使用influxdb-client管理InfluxDB的bucket

    bucket的概念类似数据库的 库 同时每个库中的数据都因为存在 时间戳 每个数据都会有一个对应的时间点 influxdb client python官方github页面 https github com influxdata influx
  • termux基本使用教程[通俗易懂]

    初始化 下载并初始化termux 安装vim 安装编辑器vim pkg install vim 解决中文乱码问题 在home目录下 新建 vimrc文件 vim vimrc 添加内容如下 set fileencodings utf 8 gb
  • 华为机试题67-24点游戏算法

    描述 给出4个1 10的数字 通过加减乘除运算 得到数字为24就算胜利 除法指实数除法运算 运算符仅允许出现在两个数字之间 本题对数字选取顺序无要求 但每个数字仅允许使用一次 且需考虑括号运算 此题允许数字重复 如3 3 4 4为合法输入
  • flex实现简单计算机程序,Macromedia Flex 制作计算器源码和制作步骤

    这个计算器是由两个部分组成 一个前台界面的MXML文件 一个后台控制器的AS文件 mxml文件负责显示计算器的界面 as文件负责处理用户发送的信息并计算结果 在这个教程中我们主要学习 list The Application class T