Package: matlab.ui.componentcontainer
Base class for developing UI component objects
matlab.ui.componentcontainer.ComponentContainer
is a class you build on
to make your own classes of UI Component objects. When you define a subclass of this
base class, you can use the ComponentContainer
properties and methods
to build your UI component objects. Specify this syntax on the first line of your class
definition file to directly inherit from the ComponentContainer
class, where MyComponent
is the name of your
object:
classdef MyComponent < matlab.ui.componentcontainer.ComponentContainer
The matlab.ui.componentcontainer.ComponentContainer
class is a handle
class.
Abstract | true |
HandleCompatible | true |
For information on class attributes, see Class Attributes.
BackgroundColor
— Background color[.94 .94 .94]
(default) | RGB triplet | hexadecimal color code | 'r'
| 'g'
| 'b'
| ...Background color, specified as an RGB triplet, a hexadecimal color code, or one of the color options listed in the table.
RGB triplets and hexadecimal color codes are useful for specifying custom colors.
An RGB triplet is a three-element row vector whose
elements specify the intensities of the red, green, and blue
components of the color. The intensities must be in the
range [0,1]
; for example, [0.4
0.6 0.7]
.
A hexadecimal color code is a character vector or a string
scalar that starts with a hash symbol (#
)
followed by three or six hexadecimal digits, which can range
from 0
to F
. The
values are not case sensitive. Thus, the color codes
'#FF8800'
,
'#ff8800'
, '#F80'
,
and '#f80'
are equivalent.
Alternatively, you can specify some common colors by name. This table lists the named color options, the equivalent RGB triplets, and hexadecimal color codes.
Color Name | Short Name | RGB Triplet | Hexadecimal Color Code | Appearance |
---|---|---|---|---|
'red' | 'r' | [1 0 0] | '#FF0000' |
|
'green' | 'g' | [0 1 0] | '#00FF00' |
|
'blue' | 'b' | [0 0 1] | '#0000FF' |
|
'cyan'
| 'c' | [0 1 1] | '#00FFFF' |
|
'magenta' | 'm' | [1 0 1] | '#FF00FF' |
|
'yellow' | 'y' | [1 1 0] | '#FFFF00' |
|
'black' | 'k' | [0 0 0] | '#000000' |
|
'white' | 'w' | [1 1 1] | '#FFFFFF' |
|
Here are the RGB triplets and hexadecimal color codes for the default colors MATLAB® uses in many types of plots.
RGB Triplet | Hexadecimal Color Code | Appearance |
---|---|---|
[0 0.4470 0.7410] | '#0072BD' |
|
[0.8500 0.3250 0.0980] | '#D95319' |
|
[0.9290 0.6940 0.1250] | '#EDB120' |
|
[0.4940 0.1840 0.5560] | '#7E2F8E' |
|
[0.4660 0.6740 0.1880] | '#77AC30' |
|
[0.3010 0.7450 0.9330] | '#4DBEEE' |
|
[0.6350 0.0780 0.1840] | '#A2142F' |
|
GetAccess | public |
SetAccess | public |
Dependent | true |
GetObservable | true |
SetObservable | true |
Visible
— State of visibility'on'
(default) | on/off logical valueState of visibility, specified as 'on'
or
'off'
, or as numeric or logical 1
(true
) or 0
(false
). A value of 'on'
is
equivalent to true
, and 'off'
is
equivalent to false
. Thus, you can use the value of this
property as a logical value. The value is stored as an on/off logical value
of type matlab.lang.OnOffSwitchState
.
'on'
— Display the object.
'off'
— Hide the object without
deleting it. You still can access the properties of an invisible
UI component.
To make your app start faster, set the Visible
property to 'off'
for all components that do not need to
appear at startup.
Changing the size of an invisible container triggers the
SizeChangedFcn
callback when it becomes
visible.
Changing the Visible
property of a container does
not change the values of the
Visible
properties of child components. This is
true even though hiding the container causes the child components to be
hidden.
GetAccess | public |
SetAccess | public |
Dependent | true |
GetObservable | true |
SetObservable | true |
ContextMenu
— Context menuGraphicsPlaceholder
array (default) | ContextMenu
objectContext menu, specified as a ContextMenu
object created
using the uicontextmenu
function.
Use this property to display a context menu when you right-click on a
component.
GetAccess | public |
SetAccess | public |
NonCopyable | true |
Transient | true |
GetObservable | true |
SetObservable | true |
Position
— UI component size and location, excluding margins[left bottom width height]
UI component size and location, excluding the margins for decorations such
as axis labels and tick marks. Specify this property as a vector of form
[left bottom width height]
.
Note
Setting this property has no effect when the parent of the UI
component is a GridLayout
.
GetAccess | public |
SetAccess | public |
Dependent | true |
Units
— Units of measurement'pixels'
(default)Units of measurement, specified as 'pixels'
.
GetAccess | public |
SetAccess | public |
Dependent | true |
GetObservable | true |
SetObservable | true |
Layout
— Layout optionsLayoutOptions
array (default) | GridLayoutOptions
objectLayout options, specified as a GridLayoutOptions
object. This property specifies options for components that are children of grid layout containers. If the component is not a child of a grid layout container (for example, it is a child of a figure or panel), then this property is empty and has no effect. However, if the component is a child of a grid layout container, you can place the component in the desired row and column of the grid by setting the Row
and Column
properties on the GridLayoutOptions
object.
For example, this code places an image component in the third row and second column of its parent grid.
g = uigridlayout([4 3]); im = uiimage(g); im.ImageSource = 'peppers.png'; im.ScaleMethod = 'fill'; im.Layout.Row = 3; im.Layout.Column = 2;
To make the image span multiple rows or columns, specify the
Row
or Column
property as a
two-element vector. For example, this image spans columns
2
through
3
.
im.Layout.Column = [2 3];
GetAccess | public |
SetAccess | public |
Interruptible
— Callback interruption'on'
(default) | on/off logical valueCallback interruption, specified as 'on'
or
'off'
, or as numeric or logical 1
(true
) or 0
(false
). A value of 'on'
is
equivalent to true
, and 'off'
is
equivalent to false
. Thus, you can use the value of this
property as a logical value. The value is stored as an on/off logical value
of type matlab.lang.OnOffSwitchState
.
This property determines if a running callback can be interrupted. There are two callback states to consider:
The running callback is the currently executing callback.
The interrupting callback is a callback that tries to interrupt the running callback.
Whenever MATLAB invokes a callback, that callback attempts to interrupt the
running callback (if one exists). The Interruptible
property of the object owning the running callback determines if
interruption is allowed.
A value of 'on'
allows other callbacks to
interrupt the object's callbacks. The interruption occurs at the
next point where MATLAB processes the queue, such as when there is a
drawnow
,
figure
,
uifigure
,
getframe
,
waitfor
, or
pause
command.
If the running callback contains one of those commands, then MATLAB stops the execution of the callback at that point and executes the interrupting callback. MATLAB resumes executing the running callback when the interrupting callback completes.
If the running callback does not contain one of those commands, then MATLAB finishes executing the callback without interruption.
A value of 'off'
blocks all interruption
attempts. The BusyAction
property of the
object owning the interrupting callback determines if the
interrupting callback is discarded or put into a queue.
Note
Callback interruption and execution behave differently in these situations:
If the interrupting callback is a
DeleteFcn
,
CloseRequestFcn
or
SizeChangedFcn
callback, then the
interruption occurs regardless of the
Interruptible
property
value.
If the running callback is currently executing the
waitfor
function, then the
interruption occurs regardless of the
Interruptible
property
value.
Timer
objects execute
according to schedule regardless of the
Interruptible
property
value.
When an interruption occurs, MATLAB does not save the state of properties or the display. For
example, the object returned by the gca
or gcf
command might
change when another callback executes.
GetAccess | public |
SetAccess | public |
GetObservable | true |
SetObservable | true |
BusyAction
— Callback queuing'queue'
(default) | 'cancel'
Callback queuing, specified as 'queue'
or
'cancel'
. The BusyAction
property
determines how MATLAB handles the execution of interrupting callbacks. There are two
callback states to consider:
The running callback is the currently executing callback.
The interrupting callback is a callback that tries to interrupt the running callback.
Whenever MATLAB invokes a callback, that callback attempts to interrupt a
running callback. The Interruptible
property of the
object owning the running callback determines if interruption is permitted.
If interruption is not permitted, then the BusyAction
property of the object owning the interrupting callback determines if it is
discarded or put in the queue. These are possible values of the
BusyAction
property:
'queue'
— Puts the interrupting callback in a
queue to be processed after the running callback finishes
execution.
'cancel'
— Does not execute the interrupting
callback.
GetAccess | public |
SetAccess | public |
GetObservable | true |
SetObservable | true |
BeingDeleted
— Deletion statusDeletion status, returned as an on/off logical value of type matlab.lang.OnOffSwitchState
.
MATLAB sets the BeingDeleted
property to
'on'
when the DeleteFcn
callback
begins execution. The BeingDeleted
property remains set
to 'on'
until the component object no longer
exists.
Check the value of the BeingDeleted
property to
verify that the object is not about to be deleted before querying or
modifying it.
GetAccess | public |
SetAccess | protected |
GetObservable | true |
SetObservable | true |
Parent
— Parent containerFigure
object (default) | Panel
object | Tab
object | GridLayout
objectParent container of the component, specified as a
Figure
, Panel
,
Tab
, or GridLayout
object.
GetAccess | public |
SetAccess | public |
Transient | true |
Dependent | true |
NonCopyable | true |
GetObservable | true |
SetObservable | true |
Children
— UI component childrenGraphicsPlaceholder
array (default) | 1-D array of component objectsUI component children, returned as an empty
GraphicsPlaceholder
or a 1-D array of component
objects. The children of a UI component object can be any UI component
object.
You cannot add or remove child components using the
Children
property of the UI component. Use the
Children
property value to view the list of children
or to reorder the children. The order of the children in the property value
array reflects the front-to-back order (stacking order) of the components on
the screen.
To add a child to this list, set the Parent
property of
the child component to the UI component.
GetAccess | public |
SetAccess | public |
Transient | true |
Dependent | true |
NonCopyable | true |
HandleVisibility
— Visibility of object handle'on'
(default) | 'off'
Visibility of the component object handle in its parent's list of children, specified as one of these values:
'on'
— Component object handle is
always visible.
'off'
— Component object handle is
invisible at all times. This option is useful for preventing
unintended changes to the components by another function. To
temporarily hide the handle during the execution of that
function, set the HandleVisibility
to
'off'
.
'callback'
— Component object handle
is visible from within callbacks or functions invoked by
callbacks, but not from within functions invoked from the
command line. This option blocks access to the object in the
Command Window, but it allows callback functions to access
it.
If the object is not listed in the Children
property of
the component's parent object, then functions that get object handles by
searching the object hierarchy or querying handle properties cannot return
it. This includes get
, findobj
, gca
, gcf
, gco
, newplot
, cla
, clf
, and close
.
Hidden object handles are still valid. Set the root
ShowHiddenHandles
property to
'on'
to list all object handles, regardless of their
HandleVisibility
property setting.
GetAccess | public |
SetAccess | public |
Dependent | true |
GetObservable | true |
SetObservable | true |
Type
— Type of UI component objectType of UI component object, returned as character vector containing the component name.
GetAccess | public |
SetAccess | protected |
NonCopyable | true |
Transient | true |
Tag
— Object identifier''
(default) | character vector | string scalarObject identifier, specified as a
character vector or string scalar. You can specify a unique
Tag
value to serve as an identifier for an object.
When you need access to the object elsewhere in your code, you can use the
findobj
function to search
for the object based on the Tag
value.
GetAccess | public |
SetAccess | public |
Dependent | true |
GetObservable | true |
SetObservable | true |
UserData
— User data[]
(default) | arrayUser data, specified as any MATLAB array. For example, you can specify a scalar, vector, matrix, cell array, character array, table, or structure. Use this property to store arbitrary data on an object.
If you are working in App Designer, create public or private properties in
the app to share data instead of using the UserData
property. For more information, see Share Data Within App Designer Apps.
GetAccess | public |
SetAccess | public |
Transient | true |
GetObservable | true |
SetObservable | true |
Define a class called IPAddressComponent
that creates a custom component for inputting four values to form an IP address.
To define the class, create a file called IPAddressComponent.m
that contains the following class definition with these features:
A Value
public property that stores the IP address.
NumericField
and GridLayout
private properties that place four numeric edit fields in a horizontal row.
A setup
method that initializes NumericField
and GridLayout
.
An update
method that updates the NumericField
values when the IP address changes.
A handleNewValue
method that sets the Value
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,5], ... 'RowHeight',{22},'ColumnWidth',{30,30,30,30,22},... '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',@(o,e) 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 = IPAddressComponent;
h.ValueChangedFcn = @(o,e) 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.
When defining your class, you optionally can add a block for events that the UI component fires.
To create such an event block, give your class an events
block
with the HasCallbackProperty
attribute. When you do this,
MATLAB creates a public property for each event in the block. The public
property stores the user provided callback to execute when the event fires. The name
of the public property is the name of the event appended with the letters
Fcn
. For example, a UI component might define the public
event ValueChanged
and generate the corresponding public property
ValueChangedFcn
. Use the notify
method
to fire the event and execute the callback in the property.
For example, here is the event block for a UI component that allows a user to pick a color value.
events (HasCallbackProperty, NotifyAccess = protected) ValueChanged end
notify
method to fire the ValueChanged
event
and execute the callback in the ValueChangedFcn
property when a
user picks a color
value.function getColorFromUser(obj) c = uisetcolor(obj.Value); if (isscalar(c) && (c == 0)) return; end % Update the Value property oldValue = obj.Value; obj.Value = c; % Execute User callbacks and listeners notify(obj,'ValueChanged'); end
f = uifigure; c = ColorSelector(f,'ValueChangedFcn',@(o,e)disp('Changed'))
matlab.graphics.chartcontainer.ChartContainer
| setup
| update
You have a modified version of this example. Do you want to open this example with your edits?