vib_QQ 发表于 2010-11-18 18:07

matlab界面实现密码输入功能

请问有谁知道MATLAB的界面设计中,输入密码是如何实现的?即把输入的字符,用****代替。

zhouyang664 发表于 2010-11-18 22:12

以下的m文件可以实现,你可以学习一下,但声明此文件是我在学习是从网上下载的,由于忘记了出处,这里没有给出原创者,此文件仅用于学习交流!

Happy99 发表于 2010-11-19 15:54

回复 2 # zhouyang664 的帖子

可否将a2.m直接贴出
不然打开, 许多字体会成乱码

qibbxxt 发表于 2010-11-19 16:03

在罗老师的《matlab GUI设计学习手记》书中有程序
源程序也可以在北京航空航天大学的出版社下载的到function varargout = a2(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',gui_Singleton, ...
                   'gui_OpeningFcn', @a2_OpeningFcn, ...
                   'gui_OutputFcn',@a2_OutputFcn, ...
                   'gui_LayoutFcn',[] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end

function a2_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
javaFrame = get(hObject, 'JavaFrame');
javaFrame.setFigureIcon(javax.swing.ImageIcon('icon1.jpg'));
% = xlsread('user_information.xls');
% if ~iscellstr(raw)
%   for i = 1 : numel(raw)
%         n(i) = isnumeric(raw{i});
%   end
%   raw{n} = num2str(raw{n});
% end
handles.user = 'qibbxxt';%raw(2 : end, 1)';
handles.code = {'12358132134'};%raw(2 : end, 2)';

guidata(hObject, handles);

function varargout = a2_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;

function login_user_Callback(hObject, eventdata, handles)

function login_user_CreateFcn(hObject, eventdata, handles)
if ispc
    set(hObject, 'BackgroundColor', 'white');
else
    set(hObject, 'BackgroundColor', get(0, 'defaultUicontrolBackgroundColor'));
end

function log_Callback(hObject, eventdata, handles)
user = get(handles.login_user, 'string');
code =get(gcf,'userdata');
users = handles.user;
codes = handles.code;
n = find(strcmp(users, {user}));
if ~isempty(n) && isequal(codes{n}, code)
    h = msgbox('登陆成功!');
    uiwait(h);
    delete(gcf);
%   figure(1)
%   set(1, 'name', '系统界面');
test_readxls_2;
else
    errordlg('用户名或密码错误!', '错误提示');
    set(handles.login_code, 'string', '')
    set(hObject, 'userdata', '')
end

function log_KeyPressFcn(hObject, eventdata, handles)
if double(get(gcf, 'Currentcharacter')) == 13
    user = get(handles.login_user,'string');
    code = get(gcf, 'userdata');
    users = handles.user;
    codes = handles.code;
    n = find(strcmp(users,{user}));
    if ~isempty(n) && isequal(codes{n}, code)
      h = msgbox('登陆成功!');
      uiwait(h);
      delete(gcf);
      figure(1)
      set(1, 'name', '系统界面');
    else
      errordlg('用户名或密码错误!', '错误提示');
      set(handles.login_code, 'string', '')
      set(hObject, 'userdata', '')
    end
end

function figure1_KeyPressFcn(hObject, eventdata, handles)
c = get(hObject,'Currentcharacter');
if isstrprop(c,'graphic')
    set(hObject, 'userdata', )
    set(handles.login_code, 'string', )
else
    log_KeyPressFcn(hObject, eventdata, handles);
    val = double(c);
    if ~isempty(val) && val == 8
      str = get(hObject, 'userdata');
      if ~isempty(str)
            str(end) = [];
      end
      set(hObject,'userdata',str)
      str2 = get(handles.login_code,'string');
      if ~isempty(str2)
            str2(end) = [];
      end
      set(handles.login_code,'string',str2)
    end
end

function login_user_KeyPressFcn(hObject, eventdata, handles)
log_KeyPressFcn(hObject, eventdata, handles);


zhouyang664 发表于 2010-11-19 20:44

回复 3 # Happy99 的帖子

在matlab中打开就没有问题,用记事本打开有乱码应该是回车键显示成黑方框了吧!

Happy99 发表于 2010-11-19 20:53

回复 5 # zhouyang664 的帖子

谢谢关心, 不是回车键的问题! 我用的无法显示简体中文:@)

zhouyang664 发表于 2010-11-19 21:03

回复 6 # Happy99 的帖子

我也碰到过无法显示中文的情况!
开始我以为是matlab的事儿,后来重装之后还是,最后发现是字体设置不支持中文,打开preferences字体设置选一个中文字体看一下试试吧!

Happy99 发表于 2010-11-19 21:16

回复 7 # zhouyang664 的帖子

虽然很少使用中文, 但我用的可以显示繁体, 无法显示简体中文, 可能没有相对应的码吧

Happy99 发表于 2010-11-19 21:25

但奇怪的是从网页复制下来的又可以显示简体中文, 但存完後再打开, 会有些显示有些不显示
电脑的东东真的不行:@L
还好很少使用中文输出

smallqiao 发表于 2010-11-19 23:11

回复 4 # qibbxxt 的帖子

很好...share
页: [1]
查看完整版本: matlab界面实现密码输入功能