前言:任何编程语言到了GUI这一块都逃不了要模仿做一个计算器来证明已经入门了。上个学期学java的时候GUI着实不好整,一个计算器硬是没整出来。这学期接触了matlab,虽然他号称是面向对象的编程语言,但还是跟java,python有很大区别,在我看来,他方法调用上其实又有些像C语言实现闭包的方式。而在对象的操作上又跟java等面向对象一致。

刚入门的matlab,发现这门语言(或者叫软件)其实很容易上手,java中很难实现的计算器在matlab这个“半可视化”的GUI编程中很快就实现了。

第一篇文章献给matla ,大牛不要嘲笑哦~

界面准备

这就跟java很不一样了,java的一切空间都是需要自己创建的对象,而matlab提供一个类似画图界面的操作窗口可供用户可视化操作,当然他背后的.m文件也会自动相应地生成功能函数。

别吐槽。我知道巨丑....

计算式框和结果框都是静态文本,下面按钮使用pushbutton

当然,控件的样式操作也很方便,直接调出控件的属性查看器,直接修改样式属性。(有一种ppt的感觉有没有。。。)

属性查看器界面

相当于这个控件对象的一些属性可以在这个界面人工修改。例如string属性是控件静态显示文本,java里面需要调用setText(j)方法来设置。比较重要的是tag属性,相当于对象的名字,最开始都是系统自动起的名字。对象名当然很重要,不知道对象名怎么调用属性?怎么调用方法?

功能代码实现

计算器啥功能?基本的运算,得出一个多项式结果后还能接着这个结果运算是吧?当然最开始还得实现出发button传值是不,我们一步一步来实现:

首先一个比较重要的功能就是,控件相应功能的函数位置,因为创建控件后,matlab会自动地在.m文件中写入对象的初始化函数、回调函数(相当于java中的事件监听函数)。

右键控件->查看回调->callback,然后matlab脚本编辑页面会自动跳转至相应的代码行,这个函数下的代码就是当你触发这个控件时所执行的代码。

控件传值

首先要做的是将数字、运算符按钮上的值传到计算框内:

```matlab

function pushbutton8_Callback(hObject, eventdata, handles)

s1=get(handles.text2,'string')

s2=get(hObject,'string')

set(handles.text2,'string','')

set(handles.text2,'string',strcat(s1,s2))

```

这个比较简单,就是set(对象名,属性名,属性值)   get(对象名,属性名)的使用,这两个函数在GUI编程中是最常用的。当然这个调用对象属性的风格颇像C语言...

算术表达式的运算

前面所有的数字、运算符的传递到静态文本框内的都是string格式,那么怎么计算这个字符串格式的算术式从而显示结果到结果框中呢?

嗯,巧了,正在修的数据结构(使用C语言)告诉我,利用堆栈数据结构将字符串转化成后缀表达式,再出栈运算.....

但是matlab作为一个重达几个G的软件不会连这个都要我们自己编算法吧?

好的,肯定不会 ,下面的eval函数就是这功能:

```matlab

str=get(handles.text2,'string')

answer=eval(str)

set(handles.text4,'string',num2str(answer))

```

来,我们先看下目前的效果:

恩,并不知道怎么让文字垂直居中...

连续运算

接下来解决的就是连续运算了,就是接着上步结果接着算。那么要干两件事:上步结果显示在输入框内、符号键第二次点击执行不同的代码。

比较难做到的就是第二点。比如我们第一次点击“+”时,是正常的运算。运算完结果后,第二次再点击+时应该接着上步运算,此时执行的代码就不一样了。

我解决的办法是设置全局变量,  每个运算符回调函数下设置 global i=0,执行完第一次之后把i置1;当然AE按钮执行后要重新置成0;

这样运算符的代码修改为这样:

```matlab

global i

if i==0

s1=get(handles.text2,'string')

s2=get(hObject,'string')

set(handles.text2,'string',strcat(s1,s2))

else

set(handles.text2,'string','')

s=get(handles.text4,'string')

ss=get(hObject,'string')

set(handles.text2,'string',strcat(s,ss))

end

i=i+1

```

现在的效果:

实现连续计算

这样就差不多了,然而有个bug,就是这样一来输入框就只能进行二项式的运算了,多项式如果第二次输入同一个运算符就gg了。这就需要再计算按钮上再设置计数器,然后在在运算按钮上加条件判断....

好吧,接下来的就不写了,因为GUI只要掌握图形界面背后代码是怎样实现的就ok了。matlab比较好入门,然而精通他还是很难的。更要命的是数学要好呀,线性代数balabal.....

java gui编程 计算器_Matlab-GUI编程:简单计算器的实现相关推荐

  1. python实现简单计算器_Python实现的简单计算器功能详解

    本文实例讲述了Python实现的简单计算器功能.分享给大家供大家参考,具体如下: 使用python编写一款简易的计算器 计算器效果图 首先搭建计算器的面板: 计算器面板结构 建造一个继承于wx.Fra ...

  2. c语言中的16进制坐标计算器,C语言实现简单计算器(VC6.0环境)

    C语言版简易计算器,包含几个小功能,而且比较精简,适合新手了解整合框架结构 源代码如下: #include #include #include //预处理指令 int main(void) { dou ...

  3. java编写安卓计算器_安卓实现简单计算器

    实现一个计算器 ,有加减乘除功能,小数点和清除操作. 这是学校安卓老师布置的作业,计算器说实话实现起来挺多坑的,之前在算法比赛中见过这种题,用来熟悉安卓的布局的确是挺好的一个小案例,不过需要挺多逻辑处 ...

  4. c语言设计简单计算器,c语言设计简单计算器实现加减乘除运算

    编写程序的目的就是使程序有他应用的地方,编写一个简单的计算器来实现我们计算的目的. 利用swich  case 语句和循环结构来实现简单程序的编写.利用选择语句来进行输入的选择,然后利用所输入的数字的 ...

  5. c语言计算器实现简单的四则运算.(加,减,乘,除)实验报告,C语言数据结构“简单计算器。”1、简单计算器。请按照四则运算加、减、乘、除、幂(^)和括号的优先关系和惯例,编写计算器程...

    共回答了23个问题采纳率:82.6% #include #define MaxSize 99 void trans(char str[],char exp[]) /*将算术表达式转换成后追表达式*/ ...

  6. c程序语言编写 计算器,C语言编写简单计算器

    主函数 main() { int result;  /*运算的结果*/ printf("*****************************************\n"); ...

  7. python计算器小数点功能_Python 简单计算器实现

    参考方法: class oper: oper="" func="" def __init__(self,oper): self.oper=oper.strip( ...

  8. linux脚本编写计算器,Shell中编写简单计算器

    #!/bin/bash #2016-2-29 #于虎林 #思路如下 #1,判断有没有输入类容 #2,判断输入的是不是数值 #3,判断输入的运算符 #执行运算符操作 read -t 30 -p &quo ...

  9. 作业2:简答题、编程实践(简单计算器)、思考题

    文章目录 作业2:简答题.编程实践(简单计算器).思考题 1.简答题 2. 编程实践,小游戏 简单计算器 3.思考题 作业2:简答题.编程实践(简单计算器).思考题 1.简答题 解释 游戏对象(Gam ...

  10. java方法练习之简单计算器

    关于导包的描述正确的是 C A. 一个源文件中只能有一条导包语句 B. 导包语句必须写在源文件的第一行有效语句 C. 导包语句的关键字为 import D. 位于java.util 包中的类无需导包, ...

最新文章

  1. 专访博世王红星:大数据和AI将是中国制造业升级新动力
  2. 多ajax请求的各类解决方案(同步, 队列, cancel请求)
  3. java mysql 自动提交_Mybatis的JDBC提交设置/关闭mysql自动提交------关于mysql自动提交引发的惨剧...
  4. linux系统下docker安装,Linux下Docker的安装与使用
  5. 白话Elasticsearch14-深度探秘搜索技术之基于multi_match 使用most_fields策略进行cross-fields search弊端
  6. java 注释 连接,java – 如何使用JPA注释创建连接表?
  7. Python 数据分析与展示笔记4 -- Pandas 库基础
  8. php中等3秒再跳转,跳转和重定向
  9. 专业文化计算机艺考生,专业课和文化课都优秀?那艺考生的你不知道这个就损失大了...
  10. Toolbar设置详解----掉坑总结
  11. linux Vue+nginx+django 实现前后端分离
  12. 【PAT乙】1038 统计同成绩学生 (20分) 裸桶排序
  13. java程序如何提取数据库json格式_java解析json格式文件,再保存在数据库怎么做?...
  14. SSM实现会议室预约管理系统
  15. html里怎么画斜线表头,Word2013中绘制斜线表头的方法
  16. Unity 回合制战斗系统(中级篇)-血条和伤害数值
  17. Android Couldn‘t find meta-data for provider with authority
  18. Linux上一款强大的GIF录制软件,Peek
  19. 大数据与人工智能人脸识别
  20. NIPS大会最精彩一日:AlphaZero遭受质疑;史上第一场正式辩论与LeCun激情抗辩;元学习强化学习亮点复盘...

热门文章

  1. 批处理bat 延时启动的方法
  2. 2021这一年 | 用数字技术实现普惠金融
  3. 解决专为旧版android打造
  4. Realtek定频(非信令)指令说明
  5. OneNav一为主题魔改教程(二):使用纯css增加网站Logo扫光效果--洞五洞洞幺
  6. 深度系统对Java的支持,国产操作系统深度deepin V20体验
  7. memtester4.3.0 方法与 ARM A53 移植
  8. 平面变压器大概价格_平面变压器
  9. RJ45和PSY之间为什么用网络变压器
  10. img-polaroid_这个由AI驱动的宝丽来会散发出幼稚的图画而不是照片