matlab.ui.componentcontainer.ComponentContainer.setup - Set up instance of component container subclass - MATLAB (original) (raw)
Class: matlab.ui.componentcontainer.ComponentContainer
Namespace: matlab.ui.componentcontainer
Set up instance of component container subclass
Since R2020b
Description
setup([obj](#mw%5Fd242cf91-bd5f-42a0-9e6d-31a3153af34f%5Fsep%5Fmw%5Fe3a44f91-9696-4128-8f3e-55ee437b28ac))
sets the initial state of the UI component. It executes once when the UI component object is created, after the UI component's parent is assigned. Any other property values passed as name-value arguments to the UI component's constructor method are assigned after the setup
method executes.
Define this method to execute initialization code for each new instance of your class. For example, you can use this method to create the underlying graphics objects and set initial property values on those objects.
Input Arguments
Object of the class that inherits from thematlab.graphics.componentcontainer.ComponentContainer
base class.
Attributes
Abstract | true |
---|---|
Protected | true |
To learn about attributes of methods, seeMethod Attributes.
Examples
Define a class named IPAddressComponent
that creates a custom component for inputting four values to form an IP address.
To define the class, create a file named IPAddressComponent.m
that contains the following class definition with these features:
- A
Value
public property that stores the IP address. NumericField
andGridLayout
private properties that place four numeric edit fields in a horizontal row.- A
setup
method that initializesNumericField
andGridLayout
. - An
update
method that updates theNumericField
values when the IP address changes. - A
handleNewValue
method that sets theValue
property based on the values of the 4 numeric edit fields.
classdef IPAddressComponent < matlab.ui.componentcontainer.ComponentContainer % IPAddressComponent a set of 4 edit fields for IP Address input properties Value (1,4) {mustBeNonnegative, mustBeInteger, mustBeLessThanOrEqual(Value, 255)} = [192 168 1 2]; end
events (HasCallbackProperty, NotifyAccess = protected)
ValueChanged % ValueChangedFcn callback property will be generated
end
properties (Access = private, Transient, NonCopyable)
NumericField (1,4) matlab.ui.control.NumericEditField
GridLayout matlab.ui.container.GridLayout
end
methods (Access=protected)
function setup(obj)
% Set the initial position of this component
obj.Position = [100 100 150 22];
% Layout
obj.GridLayout = uigridlayout(obj,[1,4], ...
'RowHeight',{22},'ColumnWidth',{'1x','1x','1x','1x'},...
'Padding',0,'ColumnSpacing',2);
% Building blocks
for k = 1:4
obj.NumericField(k) = uieditfield(obj.GridLayout, 'numeric',...
'Limits', [0 255], 'RoundFractionalValues', true, ...
'FontName', 'Courier New', 'FontWeight', 'bold', ...
'ValueChangedFcn',@(src,event) obj.handleNewValue());
end
end
function update(obj)
% Update view
for k = 1:4
obj.NumericField(k).Value = obj.Value(k);
end
end
end
methods (Access=private)
function handleNewValue(obj)
obj.Value = [obj.NumericField.Value];
% Execute the event listeners and the ValueChangedFcn callback property
notify(obj,'ValueChanged');
end
end
end
Next, create the component by calling the IPAddressComponent
constructor method, which is provided by the ComponentContainer
class, and return the object as h
. Specify a function that displays the new IP address in the Command Window when the component value changes.
h.ValueChangedFcn = @(src,event) disp("Value changed to: " + num2str(h.Value));
Enter the IP Address 192.168.1.10
into the edit fields. MATLABĀ® displays the updated IP address in the Command Window.
Tips
- Do not call
drawnow
within thesetup
andupdate
methods of your UI component class. Such calls can cause unexpected screen updates in apps that use the UI component. Instead, rely on app creators (who use your component) to calldrawnow
in their app code when they need to trigger a screen update. These calls from outside the component code update all UI components in the app, including those created using theComponentContainer
class.
Version History
Introduced in R2020b