How to update edit box's callback as soon as entering data?

14 次查看(过去 30 天)
I have a modal guide gui with bunch of editable edit boxes. everything works out except for when I attempt to close the gui immediately after entering a new input (with keyboard) in any one of the edit boxes. It's like the changes is not effective unless I click somewhere on the gui's figure before closing it.
Any help is appreciated

回答(2 个)

Oleg Komarov
Oleg Komarov 2012-8-6
编辑:Oleg Komarov 2012-8-9
There is a problem with the edit box, I show a solution here: http://www.mathworks.in/matlabcentral/answers/33136#answer_41732
And this thread explains the behaviour of the MATLAB's edit box: http://www.mathworks.com/matlabcentral/newsreader/view_thread/151905
No, unfortunately it doesn't work even if I try to give focus to the figure. This is the script (it works in debugging mode but to no use)
function out = mygui
% Create a simple guy with one editbox
h.f = figure('toolbar','none','menubar','none');
h.e = uicontrol('Style','edit','units','pix','position',[100 100 200,20]);
% Set CloseRequestFcn
set(h.f, 'CloseRequestFcn',@f_crf)
% Set into wait so that we can assign out
uiwait(h.f)
% Assign out IF resumed
out = h.out;
% Close gui
delete(h.f)
function f_crf(varargin)
% Force focus to figure
set(h.e,'Visible','off')
drawnow
set(h.e,'Visible','on')
% Retrieve string
h.out = get(h.e,'string');
% Resume
uiresume(h.f)
end
end
  1 个评论
Matt Fig
Matt Fig 2012-8-9
编辑:Matt Fig 2012-8-9
There is a way to do this without Java, but it can get messy and can involve lots of coding. Take Oleg's advice and use Java. Here I altered Oleg's GUI to include some Java to allow you to close the GUI without hitting return or clicking in the GUI window after entering data.
function out = mygui
% Create a simple gui with one editbox
h.f = figure('toolbar','none','menubar','none');
h.e = uicontrol('Style','edit','units','pix','position',[100 100 200,20]);
h.r = java.awt.Robot;
h.k = java.awt.event.KeyEvent.VK_ENTER;
% Set CloseRequestFcn
set(h.f, 'CloseRequestFcn',@f_crf)
% Set into wait so that we can assign out
uicontrol(h.e)
uiwait(h.f)
% Assign out IF resumed
out = h.out;
% Close gui
delete(h.f)
function f_crf(varargin)
pause(.25)
h.r.keyPress(h.k) % press return!
drawnow
h.out = get(h.e,'string');
uiresume(h.f)
end
end

请先登录,再进行评论。


hana
hana 2012-8-9
Is there any way, I can do something in the CloseRequestFcn function to avoid this?
  1 个评论
Oleg Komarov
Oleg Komarov 2012-8-9
See my answer, I added another consideration and some code which won't work. So far to my knowledge the only solution is Java.
It's not that complicated you should give it a try.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Startup and Shutdown 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by