java gui编程 计算器_Matlab-GUI编程:简单计算器的实现
前言:任何编程语言到了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编程:简单计算器的实现相关推荐
- python实现简单计算器_Python实现的简单计算器功能详解
本文实例讲述了Python实现的简单计算器功能.分享给大家供大家参考,具体如下: 使用python编写一款简易的计算器 计算器效果图 首先搭建计算器的面板: 计算器面板结构 建造一个继承于wx.Fra ...
- c语言中的16进制坐标计算器,C语言实现简单计算器(VC6.0环境)
C语言版简易计算器,包含几个小功能,而且比较精简,适合新手了解整合框架结构 源代码如下: #include #include #include //预处理指令 int main(void) { dou ...
- java编写安卓计算器_安卓实现简单计算器
实现一个计算器 ,有加减乘除功能,小数点和清除操作. 这是学校安卓老师布置的作业,计算器说实话实现起来挺多坑的,之前在算法比赛中见过这种题,用来熟悉安卓的布局的确是挺好的一个小案例,不过需要挺多逻辑处 ...
- c语言设计简单计算器,c语言设计简单计算器实现加减乘除运算
编写程序的目的就是使程序有他应用的地方,编写一个简单的计算器来实现我们计算的目的. 利用swich case 语句和循环结构来实现简单程序的编写.利用选择语句来进行输入的选择,然后利用所输入的数字的 ...
- c语言计算器实现简单的四则运算.(加,减,乘,除)实验报告,C语言数据结构“简单计算器。”1、简单计算器。请按照四则运算加、减、乘、除、幂(^)和括号的优先关系和惯例,编写计算器程...
共回答了23个问题采纳率:82.6% #include #define MaxSize 99 void trans(char str[],char exp[]) /*将算术表达式转换成后追表达式*/ ...
- c程序语言编写 计算器,C语言编写简单计算器
主函数 main() { int result; /*运算的结果*/ printf("*****************************************\n"); ...
- python计算器小数点功能_Python 简单计算器实现
参考方法: class oper: oper="" func="" def __init__(self,oper): self.oper=oper.strip( ...
- linux脚本编写计算器,Shell中编写简单计算器
#!/bin/bash #2016-2-29 #于虎林 #思路如下 #1,判断有没有输入类容 #2,判断输入的是不是数值 #3,判断输入的运算符 #执行运算符操作 read -t 30 -p &quo ...
- 作业2:简答题、编程实践(简单计算器)、思考题
文章目录 作业2:简答题.编程实践(简单计算器).思考题 1.简答题 2. 编程实践,小游戏 简单计算器 3.思考题 作业2:简答题.编程实践(简单计算器).思考题 1.简答题 解释 游戏对象(Gam ...
- java方法练习之简单计算器
关于导包的描述正确的是 C A. 一个源文件中只能有一条导包语句 B. 导包语句必须写在源文件的第一行有效语句 C. 导包语句的关键字为 import D. 位于java.util 包中的类无需导包, ...
最新文章
- 专访博世王红星:大数据和AI将是中国制造业升级新动力
- 多ajax请求的各类解决方案(同步, 队列, cancel请求)
- java mysql 自动提交_Mybatis的JDBC提交设置/关闭mysql自动提交------关于mysql自动提交引发的惨剧...
- linux系统下docker安装,Linux下Docker的安装与使用
- 白话Elasticsearch14-深度探秘搜索技术之基于multi_match 使用most_fields策略进行cross-fields search弊端
- java 注释 连接,java – 如何使用JPA注释创建连接表?
- Python 数据分析与展示笔记4 -- Pandas 库基础
- php中等3秒再跳转,跳转和重定向
- 专业文化计算机艺考生,专业课和文化课都优秀?那艺考生的你不知道这个就损失大了...
- Toolbar设置详解----掉坑总结
- linux Vue+nginx+django 实现前后端分离
- 【PAT乙】1038 统计同成绩学生 (20分) 裸桶排序
- java程序如何提取数据库json格式_java解析json格式文件,再保存在数据库怎么做?...
- SSM实现会议室预约管理系统
- html里怎么画斜线表头,Word2013中绘制斜线表头的方法
- Unity 回合制战斗系统(中级篇)-血条和伤害数值
- Android Couldn‘t find meta-data for provider with authority
- Linux上一款强大的GIF录制软件,Peek
- 大数据与人工智能人脸识别
- NIPS大会最精彩一日:AlphaZero遭受质疑;史上第一场正式辩论与LeCun激情抗辩;元学习强化学习亮点复盘...