找回密码
 注册
Simdroid-非首页
查看: 267|回复: 9

[原创] 在GUI上利用JAVA方法给控件设置输入焦点的函数mysetfocus

[复制链接]
发表于 2006-12-21 18:09:07 | 显示全部楼层 |阅读模式 来自 新加坡
最近在论坛上看到了下面的帖子讨论如何在MATLAB的GUI程序中给Edit实现KeyPressFnc函数,以实现每次按下键盘都能处理的效果。看起来似乎是个简单的问题,没想到试过后才发现它其实并不容易实现。由于自己已好久没有动过GUI的开发,想借机练习一下;再加上对这个问题很感兴趣,于是认真琢磨了一下,最终形成了一个思路,并产生了一个有意思的m函数,个人觉得可能对大家有用,所以开了这个新贴,和大家分享。
http://www.simwe.com/forum/thread-756702-1-2.html

(题外话:从做这个练习的过程中再次的感觉到MATLAB对GUI的支持仍然有很大的局限,象这个问题,在其他的编程语言比如Visual C++中可以很容易地搞定的,在MATLAB中却要费九牛二虎之力。)

这里还是以上贴中的例子程序myGUI02为例,程序很简单,界面上有一个Edit Box,以及几个Static Text,我们需要实现这样的功能:当用户在Edit Box中输入一个字符时,程序实时地捕捉用户输入,把有关信息显示在那些Static Text。

myGUI02的设计思路是利用那个Edit Box的KeyPressFcn特性(这个可能是最近几版matlab的新特性,以前只有Figure才有KeyPressFcn特性),所有的功能都在这个函数中实现,而Edit Box的CallBack是空的。遇到的问题是所实现的功能时灵时不灵。问题的根源是在执行EditBox的CallBack之前,get(hEdit, 'String')不能给出当前正确的内容。

于是有了一个思路:仍然使用KeyPressFcn特性,但在这个函数中我们把界面的输入焦点从该Edit Box移到另外任何一个控件上,其结果将导致MATLAB调用该Edit Box的CallBack,然后在CallBack里实现所需的功能。移动输入焦点其实很容易,用uicontrol函数就能轻松实现。但在这个例子中有一个很烦人问题,那就是当把输入焦点重新移回该Edit Box后,其中的字符串就会被高亮显示,好像被选中一样。

这时用鼠标点击该Edit Box就会使那个字符串正常显示。但是能不能在程序中自动实现呢?经过一番搜索后发现,有可能利用Java技术实现。于是现学现用,摸索一阵后,编写了一个m函数叫做mysetfocus,它利用Java技术实现模拟鼠标点击动作,以达到重新设置输入焦点的功能。主要思路来自MATLAB的File Exchange服务器上的函数setfocus,它用了一个MEX文件来实现模拟鼠标点击;又没有给出MEX文件的源码,所以无法使用于其他平台,而且经测试也无法使用于MATLAB R2006B。

mysetfocus的好处是利用Java技术,由于MATLAB很好地支持Java,所以mysetfocus的可移植性高。源码在附件中。同时也附上修改过的myGUI02(不包含mysetfocus)来演示mysetfocus的用法。欢迎大家讨论。

Have fun!

[ 本帖最后由 taohe 于 2006-12-21 18:10 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

发表于 2006-12-21 18:52:26 | 显示全部楼层 来自 湖北武汉
Simdroid开发平台
Edit Box的KeyPressFcn特性
俺落伍了,我都65
那个setfocus那天我也下来试验了哈
PS:65下这问题有什么好的思路不?
 楼主| 发表于 2006-12-21 21:34:21 | 显示全部楼层 来自 新加坡
原帖由 shunfly 于 2006-12-21 18:52 发表
...
PS:65下这问题有什么好的思路不?


mysetfocus本身是可以在matlab 6.5运行的。至于实现类似myGUI02的功能,可以使用Figure的KeyPressFcn特性,道理是一样的。你要有空的话,不妨做一个例子贴上来,要不然,等过两天我有空的话准备一个例子。
发表于 2006-12-23 02:55:34 | 显示全部楼层 来自 安徽合肥
keypressfcn其实可以做更多的事情的,比如密码登录框
发表于 2006-12-23 11:42:02 | 显示全部楼层 来自 湖北武汉
密码登录框
这个TMW FILEEXCHANGE早就存在了
发表于 2006-12-23 11:58:18 | 显示全部楼层 来自 安徽合肥
最近写一预测软件,由于预测算法较多所以采用了matlab开发。
其中有一功能就是要登录,为这密码登录框整整折腾了一夜才搞定,
早知如此,可以省了不少功夫。
以后常来坛子里看看,这里好东西不少。
发表于 2007-2-1 09:26:30 | 显示全部楼层 来自 香港

借新帖回复

我是新来的,本来想就《深入浅出matlab7.x混合编程》里的问题来问问大家。没想到,看到一篇贴字介绍说混合编程方面做得好的就是taohe,scie等等。
刚才在版里搜索了一下taohe,发现原来你就是那本《深入浅出matlab7.x混合编程》的作者!!!这真的是一本好书,太棒了!很系统,很全面。
真是太巧了。
在读的过程中我有一个问题,在该书p97页,vc++设置中,有个DEF文件的设置,请问如何设置呢?能否以例3-1来说明呢?
我的msn是:yangfanms@hotmail.com。能不能加上我呢?如果有我百思不得其解的问题的话,十分希望能及时沟通一下。
谢谢。
发表于 2007-2-1 09:32:43 | 显示全部楼层 来自 上海
原帖由 sadwanger 于 2006-12-23 11:58 发表
最近写一预测软件,由于预测算法较多所以采用了matlab开发。
其中有一功能就是要登录,为这密码登录框整整折腾了一夜才搞定,
早知如此,可以省了不少功夫。
以后常来坛子里看看,这里好东西不少。



我也写过一个密码登陆界面.采用了很多技巧性的东西,才比较好用.
发表于 2007-2-1 10:18:29 | 显示全部楼层 来自 香港

借新帖回复

我是新来的,本来想就《深入浅出matlab7.x混合编程》里的问题来问问大家。没想到,看到一篇贴字介绍说混合编程方面做得好的就是taohe,scie等等。
刚才在版里搜索了一下taohe,发现原来你就是那本《深入浅出matlab7.x混合编程》的作者!!!这真的是一本好书,太棒了!很系统,很全面。
真是太巧了。
在读的过程中我有一个问题,在该书p97页,vc++设置中,有个DEF文件的设置,请问如何设置呢?能否以例3-1来说明呢?
我的msn是:yangfanms@hotmail.com。能不能加上我呢?如果有我百思不得其解的问题的话,十分希望能及时沟通一下。
谢谢。
 楼主| 发表于 2007-2-1 19:15:27 | 显示全部楼层 来自 新加坡
原帖由 yangfanms 于 2007-2-1 10:18 发表
...
在读的过程中我有一个问题,在该书p97页,vc++设置中,有个DEF文件的设置,请问如何设置呢?能否以例3-1来说明呢? ...


书中是以Visual Studio .Net 2003为例来说的。如果你是在用vc6.0,是没有那个设置的。对于vc6.0,你只要按照p96那要创建一个.def文件并把该def文件加入工程中就行了,不用特别的设置。

我很少用msn,不好意思。不过我几乎每天晚上都会到论坛转转。有什么问题,不妨贴到论坛上,这样大家都能看到,获得帮助的几率大增。

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-17 04:33 , Processed in 0.049596 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表