How to update edit box's callback as soon as entering data?
12 views (last 30 days)
Show older comments
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
0 Comments
Answers (2)
Oleg Komarov
on 6 Aug 2012
Edited: Oleg Komarov
on 9 Aug 2012
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 Comment
Matt Fig
on 9 Aug 2012
Edited: Matt Fig
on 9 Aug 2012
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
on 9 Aug 2012
1 Comment
Oleg Komarov
on 9 Aug 2012
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.
See Also
Categories
Find more on Startup and Shutdown in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!