How to update a "child" figure?

5 views (last 30 days)
Paul Kelly
Paul Kelly on 17 Jan 2012
I have a manually generated gui which consists of a parent figure with a number of child figures laid out on uipanels.
If I click something in one of the child figure I can cause something to happen in the parent figure using a figure handle passed to the child figure as an argument when I call the function that creates it.
Is there are way of triggering in the other direction, i.e. once the child has been created, if I click something in the parent figure how do I cause something to happen in the child figure?

Accepted Answer

Sean de Wolski
Sean de Wolski on 17 Jan 2012
Save the handle to the child figure in appdata and set it as necessary:
setappdata(hParent,'hChild1',hChild);
On click:
hChild = getappdata(hParent,'hChild');
set(hChild,...)
  3 Comments
Paul Kelly
Paul Kelly on 17 Jan 2012
sorry *right
Sean de Wolski
Sean de Wolski on 17 Jan 2012
Sure you can save the figure handle in appdata, that's what my above setappdata command did.
doc setappdata/doc getappdata for more info

Sign in to comment.

More Answers (1)

Paul Kelly
Paul Kelly on 18 Jan 2012
Thanks Sean, I understood your example but I missed some details.
For anyone who is interested, this is the example I created to check how to do it.
This is the parent GUI
function exampleParentGUI()
% Create the GUI parent
hParent = figure( ...
'Name', 'Parent', ...
'NumberTitle', 'off', ...
'Units', 'pixels', ...
'Position',[200 200 640 480], ...
'MenuBar', 'none', ...
'Resize', 'off');
% Place a button on the parent
uicontrol(hParent, ...
'Style', 'pushbutton', ...
'Units', 'pixels ', ...
'Position', [12, 12, 96, 24], ...
'String', 'Parent action', ...
'Callback', {@callback_ParentAction});
% Allocate an area for the child (normalised units)
childPos = [0 0.5 1 0.5];
createChildPanel(hParent, childPos)
% Grab the function handle for the child function
parentDoSomething = getappdata(hParent, 'childActionFn');
function callback_ParentAction(hObj, ~)
parentAct = ...
sprintf('Someone clicked the %s button\n', get(hObj, 'String'));
parentDoSomething(parentAct)
end
end
and this is the child
function createChildPanel(hParentArg, normalisedPos)
% Create panel
childPanel = uipanel(hParentArg, ...
'Units', 'normalized ', ...
'Position', normalisedPos, ...
'BackgroundColor', 'red');
% Place a button on the child panel
uicontrol(childPanel, ...
'Style', 'pushbutton', ...
'Units', 'pixels ', ...
'Position', [12, 12, 96, 24], ...
'String', 'Child action', ...
'Callback', {@callback_ChildAction});
% Place a static text
hText = uicontrol(childPanel, ...
'Style', 'text', ...
'Units', 'pixels ', ...
'Position', [120, 12, 96*5, 24], ...
'HorizontalAlignment', 'left', ...
'String', 'Nobody has done anything yet');
% Make childDoSomething available to the parent
setappdata(hParentArg, 'childActionFn', @childDoSomething);
function childDoSomething(childAct)
set(hText, 'String', childAct);
end
function callback_ChildAction(hObj, ~)
actStr = ...
sprintf('Someone clicked the %s button\n', get(hObj, 'String'));
childDoSomething(actStr)
end
end

Categories

Find more on Environment and Settings in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!