笔者最近参加了一个小比赛,需要用MATLAB 写个软件,这里总结一下写登录界面时的一些心得体会。
实现方法是找的网上大牛提供的经验并结合自己的改进,这里就不一一列出链接,如果侵权,请联系笔者。
直接给出效果图:
主要是实现三个小功能,一个是更改了左上角的小图标;一个是用户名输入框有提醒,当鼠标点击输入框时,提醒内容消失;一个是输入密码时,会自动隐藏输入密码,输入显示为星号。以下一一列出功能实现参考。
这个功能需要一个chgicon子函数,该子函数为大牛提供:
function chgicon(hfig,iconfile)
error(nargchk(2,2,nargin));
if ~ishandle(hfig) && ~isequal(get(hfig,'Type'),'figure')
error('The first input argument must be a Figure handle.');
end
if ~ischar(iconfile) || ~exist(iconfile,'file')
error('Icon file name is not input properly.');
end
mde = com.mathworks.mde.desk.MLDesktop.getInstance;
if isequal(get(hfig,'NumberTitle'),'off') && isempty(get(hfig,'Name'))
figTag = 'junziyang'; %Name the figure temporarily
set(hfig,'Name',figTag);
elseif isequal(get(hfig,'NumberTitle'),'on') && isempty(get(hfig,'Name'))
figTag = ['Figure ',num2str(hfig)];
elseif isequal(get(hfig,'NumberTitle'),'off') && ~isempty(get(hfig,'Name'))
figTag = get(hfig,'Name');
else
figTag = ['Figure ',num2str(hfig),': ',get(hfig,'Name')];
end
drawnow %Update figure window
jfig = mde.getClient(figTag); %Get the underlying JAVA object of the figure.
jfig.setClientIcon(javax.swing.ImageIcon(iconfile));
% if isequal(get(hfig,'Name'),'junziyang')
% set(hfig,'Name','');lete the temporary figure name
% end
然后在MATLAB GUI 开头的OpeningFcn()函数下写入以下内容:
iconfile = 'icon\HITlogo.jpg';
chgicon(hObject,iconfile)
其中,iconfile为自己设置的图标地址。
一般在MATLAB GUI 开头的OpeningFcn()函数下写入内容时,都是如下地方插入自己写入代码。
handles.output = hObject;
% 写入代码处
% Update handles structure
guidata(hObject, handles);
备注:该方法在主界面实现起来很方便有效,但是有时如果主界面调用了子界面,子界面应用该方法更改图标的时候,可能会不好使,笔者暂时没有找到原因,欢迎交流。
上图中用户名输入框内有“请输入用户名或教师工号”的提醒内容,并且提醒内容的颜色比较浅。这个提醒内容可以很方便的在输入框(可编辑文本)的String属性中提前加入,并更改ForegroundColor属性以调整颜色,至于字体(FnotName属性),默认是
MS Sans Serif,可改为Microsoft Yahei(微软雅黑)。
此时运行GUI 便会看到输入框内有提示内容。
但是如何实现点击输入框时,提示内容消失呢?且提示内容消失后,输入了用户名,再次点击输入框,刚输入的内容不会再次消失。
为了实现这一功能,右键用户名输入框,点击查看回调下的ButtonDownFcn,创建输入框(可编辑文本)ButtonDownFcn函数
在ButtonDownFcn函数下,输入以下代码内容:
set(hObject, 'String', '', 'Enable', 'on');
set(hObject, 'ForegroundColor', [0, 0, 0]);
uicontrol(hObject);
第一行代码为清空输入框内容;
第二行代码为把字体颜色调成默认的黑色;
第三行代码为继续控制GUI界面。如果少了这一句,当点击输入框时,前两行代码正常执行,提示内容消失,但当键盘开始输入时,输入内容会输入在MATLAB的命令行窗口。
为了实现这一功能,右键密码输入框,点击查看回调下的KeyPressFcn,创建输入框(可编辑文本)KeyPressFcn函数
在KeyPressFcn函数下,输入以下代码内容:
global passWord
passWord = get( hObject, 'UserData' );
switch eventdata.Key
case 'backspace'
passWord = passWord( 1:end-1 );
case 'return'
% uiresume;
return;
otherwise
passWord = [passWord eventdata.Character];
end
set( hObject, 'UserData', passWord );
set( hObject, 'String', char( '*'*sign(passWord) ) );
其中 passWord 即为输入的密码字符串。效果如下
备注:该方法唯一不足之处在于,输入密码时,光标始终在左边!