Main Content

matlab.ui.componentcontainer.ComponentContainer クラス

名前空間: matlab.ui.componentcontainer

カスタム UI コンポーネント オブジェクトの開発の基底クラス

R2020b 以降

説明

matlab.ui.componentcontainer.ComponentContainer は、カスタム UI コンポーネント オブジェクトの独自のクラスを作成するために基盤として作成するクラスです。この基底クラスのサブクラスを定義するときは、ComponentContainer のプロパティと、UI コンポーネント オブジェクトをビルドするメソッドを使用できます。ComponentContainer クラスから直接継承するには、クラス定義ファイルの最初の行で次の構文を指定します。ここで、MyComponent はオブジェクト名です。

classdef MyComponent < matlab.ui.componentcontainer.ComponentContainer

matlab.ui.componentcontainer.ComponentContainer クラスは handle クラスです。

クラスの属性

抽象型
true
ConstructOnLoad
true
HandleCompatible
true

クラス属性の詳細については、クラスの属性を参照してください。

プロパティ

すべて展開する

色とスタイル

背景色。RGB 3 成分、16 進数カラー コード、または表にリストされた色オプションのいずれかとして指定します。

RGB 3 成分および 16 進数カラー コードは、カスタム色を指定するのに役立ちます。

  • RGB 3 成分は、色の赤、緑、青成分の強度を指定する 3 成分の行ベクトルです。強度値は [0,1] の範囲でなければなりません。たとえば [0.4 0.6 0.7] のようになります。

  • 16 進数カラー コードは、ハッシュ記号 (#) で始まり、3 桁または 6 桁の 0 から F までの範囲の 16 進数が続く文字ベクトルまたは string スカラーです。この値は大文字と小文字を区別しません。したがって、カラー コード "#FF8800""#ff8800""#F80"、および "#f80" は等価です。

あるいは、名前を使用して一部の一般的な色を指定できます。次の表に、名前の付いた色オプション、等価の RGB 3 成分、および 16 進数カラー コードを示します。

色名省略名RGB 3 成分16 進数カラー コード外観
"red""r"[1 0 0]"#FF0000"

Sample of the color red

"green""g"[0 1 0]"#00FF00"

Sample of the color green

"blue""b"[0 0 1]"#0000FF"

Sample of the color blue

"cyan" "c"[0 1 1]"#00FFFF"

Sample of the color cyan

"magenta""m"[1 0 1]"#FF00FF"

Sample of the color magenta

"yellow""y"[1 1 0]"#FFFF00"

Sample of the color yellow

"black""k"[0 0 0]"#000000"

Sample of the color black

"white""w"[1 1 1]"#FFFFFF"

Sample of the color white

MATLAB® の多くのタイプのプロットで使用されている既定の色の RGB 3 成分および 16 進数カラー コードを次に示します。

RGB 3 成分16 進数カラー コード外観
[0 0.4470 0.7410]"#0072BD"

Sample of RGB triplet [0 0.4470 0.7410], which appears as dark blue

[0.8500 0.3250 0.0980]"#D95319"

Sample of RGB triplet [0.8500 0.3250 0.0980], which appears as dark orange

[0.9290 0.6940 0.1250]"#EDB120"

Sample of RGB triplet [0.9290 0.6940 0.1250], which appears as dark yellow

[0.4940 0.1840 0.5560]"#7E2F8E"

Sample of RGB triplet [0.4940 0.1840 0.5560], which appears as dark purple

[0.4660 0.6740 0.1880]"#77AC30"

Sample of RGB triplet [0.4660 0.6740 0.1880], which appears as medium green

[0.3010 0.7450 0.9330]"#4DBEEE"

Sample of RGB triplet [0.3010 0.7450 0.9330], which appears as light blue

[0.6350 0.0780 0.1840]"#A2142F"

Sample of RGB triplet [0.6350 0.0780 0.1840], which appears as dark red

属性:

GetAccess
public
SetAccess
public
Dependent
true
GetObservable
true
SetObservable
true
対話機能

可視性の状態。'on' または 'off'、もしくは数値または logical 1 (true) または 0 (false) として指定します。'on' の値は true と等価であり、'off'false と等価です。したがって、このプロパティの値を logical 値として使用できます。値は matlab.lang.OnOffSwitchState 型の on/off logical 値として格納されます。

  • 'on' — オブジェクトを表示します。

  • 'off' — オブジェクトを削除せずに非表示にします。非表示の UI コンポーネントのプロパティには引き続きアクセスできます。

アプリの起動を高速化するには、起動時に表示する必要のないすべてのコンポーネントの Visible プロパティを 'off' に設定します。

非表示のコンテナーのサイズを変更した場合、そのコンテナーが表示されるときに SizeChangedFcn コールバックがトリガーされます。

コンテナーの Visible プロパティを変更しても、子コンポーネントの Visible プロパティの値は "変更されません"。これは、コンテナーを非表示にするとその子コンポーネントも非表示になる場合にも当てはまります。

属性:

GetAccess
public
SetAccess
public
Dependent
true
GetObservable
true
SetObservable
true

コンテキスト メニュー。関数 uicontextmenu を使用して作成された ContextMenu オブジェクトとして指定します。このプロパティを使用して、基底 UI コンポーネントもグラフィックス オブジェクトも含まれていないコンポーネントの領域を右クリックしたときにコンテキスト メニューを表示します。

カスタム UI コンポーネントの任意の部分を右クリックしたときにコンテキスト メニューを表示するには、カスタム コンポーネントの ContextMenu プロパティを設定するときにすべての基底 UI コンポーネントおよびグラフィックス オブジェクトの ContextMenu プロパティを設定するコードを記述します。

例: コンテキスト メニューをもつコンポーネント

このコードは、グリッド レイアウト マネージャーでラベルおよびボタンをもつシンプルなカスタム UI コンポーネントを作成します。ユーザーが SimpleComponent クラスのインスタンスを作成し、コンテキスト メニューをコンポーネントに割り当てるたびに、update メソッドのコードがその同じコンテキスト メニューを基底の GridLayoutButton、および Label オブジェクトに割り当てます。

classdef SimpleComponent < matlab.ui.componentcontainer.ComponentContainer

    properties (Access = private, Transient, NonCopyable)
        GridLayout matlab.ui.container.GridLayout
        Button matlab.ui.control.Button
        Label matlab.ui.control.Label
    end
    
    methods (Access=protected)
        function setup(obj)
            % Set component size
            obj.Position = [100 100 220 50];
            % Create grid
            obj.GridLayout = uigridlayout(obj,[1 2]);
            % Create components
            obj.Label = uilabel(obj.GridLayout,...
                "Text","My component");
            obj.Button = uibutton(obj.GridLayout);
        end
        
        function update(obj)
            obj.GridLayout.ContextMenu = obj.ContextMenu;
            obj.Label.ContextMenu = obj.ContextMenu;
            obj.Button.ContextMenu = obj.ContextMenu;
        end
    end
end

SimpleComponent オブジェクトを作成し、コンテキスト メニューを指定します。コンポーネント内の空きスペースおよびラベルを右クリックします。コンテキスト メニューが表示されます。

fig = uifigure;
cm = uicontextmenu(fig);
m1 = uimenu(cm);
SimpleComponent(fig,"ContextMenu",cm);

属性:

GetAccess
public
SetAccess
public
NonCopyable
true
Transient
true
GetObservable
true
SetObservable
true
位置

軸ラベルや目盛りなどの装飾用の余白を除いた、UI コンポーネントのサイズと位置。このプロパティは、[left bottom width height] の形式のベクトルとして指定します。

メモ

UI コンポーネントの親が GridLayout である場合は、このプロパティを設定しても効果はありません。

属性:

GetAccess
public
SetAccess
public
Dependent
true

測定の単位。'pixels' として指定します。

属性:

GetAccess
public
SetAccess
public
Dependent
true
GetObservable
true
SetObservable
true

レイアウト オプション。GridLayoutOptions オブジェクトとして指定します。このプロパティは、グリッド レイアウト コンテナーの子であるコンポーネントのオプションを指定します。コンポーネントがグリッド レイアウト コンテナーの子ではない場合 (たとえば、Figure またはパネルの子である場合) は、このプロパティは空で、効果はありません。しかし、コンポーネントがグリッド レイアウト コンテナーの子である場合は、GridLayoutOptions オブジェクトの Row プロパティおよび Column プロパティを設定して、グリッドの対象とする行と列にコンポーネントを配置することができます。

たとえば、以下のコードは、イメージ コンポーネントをその親グリッドの 3 行目の 2 列目に配置します。

g = uigridlayout([4 3]);
im = uiimage(g);
im.ImageSource = 'peppers.png';
im.ScaleMethod = 'fill';
im.Layout.Row = 3;
im.Layout.Column = 2;

イメージが複数の行または列にまたがるようにするには、Row または Column プロパティを 2 要素ベクトルとして指定します。たとえば、このイメージは列 2 から 3 にまたがります。

im.Layout.Column = [2 3];

属性:

GetAccess
public
SetAccess
public
コールバック

サイズ変更のコールバック。次の値のいずれかとして指定します。

  • 関数ハンドル。

  • 最初の要素が関数ハンドルである cell 配列。cell 配列内のその後の要素はコールバック関数に渡される引数です。

  • 有効な MATLAB 式を含む文字ベクトル (非推奨)。MATLAB は、この式をベース ワークスペースで評価します。

SizeChangedFcn コールバックは、次の場合に実行されます。

  • コンポーネントが初めて表示された。

  • コンポーネントがサイズ変更中に表示された。

  • このコンポーネントがサイズ変更後に初めて表示された。この状況は、コンポーネントが非表示の間にサイズが変更され、その後表示された場合に発生します。

属性:

GetAccess
public
SetAccess
public
Dependent
true
AbortSet
true
GetObservable
true
SetObservable
true
NonCopyable
true

オブジェクト作成関数。次の値のいずれかとして指定します。

  • 関数ハンドル。

  • 最初の要素が関数ハンドルである cell 配列。cell 配列内のその後の要素はコールバック関数に渡される引数です。

  • 有効な MATLAB 式を含む文字ベクトル (非推奨)。MATLAB は、この式をベース ワークスペースで評価します。

コールバックを関数ハンドル、cell 配列、または文字ベクトルとして指定する方法の詳細については、App Designer のコールバックを参照してください。

このプロパティは、MATLAB がオブジェクトを作成するときに実行されるコールバック関数を指定します。MATLAB は CreateFcn コールバックを実行する前に、すべてのプロパティ値を初期化します。CreateFcn プロパティを指定しない場合、MATLAB は既定の作成関数を実行します。

既存のコンポーネントに CreateFcn プロパティを設定しても効果はありません。

このプロパティを関数ハンドルまたは cell 配列として指定した場合、コールバック関数の最初の引数を使用して、作成中のオブジェクトにアクセスできます。それ以外の場合は、関数 gcbo を使用してオブジェクトにアクセスします。

属性:

GetAccess
public
SetAccess
public
Dependent
true
AbortSet
true
GetObservable
true
SetObservable
true
NonCopyable
true

オブジェクト削除関数。次の値のいずれかとして指定します。

  • 関数ハンドル。

  • 最初の要素が関数ハンドルである cell 配列。cell 配列内のその後の要素はコールバック関数に渡される引数です。

  • 有効な MATLAB 式を含む文字ベクトル (非推奨)。MATLAB は、この式をベース ワークスペースで評価します。

コールバックを関数ハンドル、cell 配列、または文字ベクトルとして指定する方法の詳細については、App Designer のコールバックを参照してください。

このプロパティは、MATLAB がオブジェクトを削除するときに実行されるコールバック関数を指定します。MATLAB は、オブジェクトのプロパティを破棄する前に DeleteFcn コールバックを実行します。DeleteFcn プロパティを指定しない場合、MATLAB は既定の削除関数を実行します。

このプロパティを関数ハンドルまたは cell 配列として指定した場合、コールバック関数の最初の引数を使用して、削除されるオブジェクトにアクセスできます。それ以外の場合は、関数 gcbo を使用してオブジェクトにアクセスします。

属性:

GetAccess
public
SetAccess
public
Dependent
true
AbortSet
true
GetObservable
true
SetObservable
true
NonCopyable
true
コールバック実行制御

コールバックの割り込み。'on' または 'off'、もしくは数値または logical 1 (true) または 0 (false) として指定します。'on' の値は true と等価であり、'off'false と等価です。したがって、このプロパティの値を logical 値として使用できます。値は matlab.lang.OnOffSwitchState 型の on/off logical 値として格納されます。

このプロパティは実行中のコールバックが割り込み可能かどうかを決定します。次の 2 つのコールバックの状態について考慮する必要があります。

  • "実行中" コールバックは、現在実行しているコールバックです。

  • "割り込み" コールバックは、実行中のコールバックに割り込もうとするコールバックです。

MATLAB がコールバックを呼び出すたびに、そのコールバックは実行中のコールバック (がある場合) に割り込もうとします。実行中のコールバックを所有するオブジェクトの Interruptible プロパティが、割り込み可能かどうかを決定します。

  • 値が 'on' の場合、他のコールバックがオブジェクトのコールバックに割り込むことができます。割り込みは、drawnowfigureuifiguregetframewaitforpause コマンドなどの、MATLAB が次にキューを処理するポイントで発生します。

    • 実行中のコールバックにこれらのいずれかのコマンドが含まれている場合、MATLAB はそのポイントでコールバックの実行を停止し、割り込みコールバックを実行します。割り込みコールバックが完了すると、MATLAB は実行中だったコールバックの実行を再開します。

    • 実行中のコールバックにこれらのコマンドが含まれていない場合、MATLAB はそのコールバックの実行を割り込みなしで完了します。

  • 値が 'off' の場合、割り込みの試行はすべてブロックされます。割り込みコールバックを所有するオブジェクトの BusyAction プロパティが、その割り込みコールバックを破棄するかキューに入れるかを決定します。

メモ

コールバックの割り込みと実行は、以下の状況では動作が異なります。

  • 割り込みコールバックが DeleteFcnCloseRequestFcn または SizeChangedFcn の各コールバックの場合、Interruptible プロパティの値にかかわらず割り込みが発生します。

  • 実行中のコールバックが関数 waitfor を現在実行している場合、Interruptible プロパティの値にかかわらず割り込みが発生します。

  • Timer オブジェクトは、Interruptible プロパティ値にかかわらず、スケジュールに従って実行されます。

MATLAB は、割り込みが発生したときにプロパティの状態や表示を保存しません。たとえば、gca コマンドや gcf コマンドから返されたオブジェクトは、別のコールバックを実行するときに変更されている可能性があります。

属性:

GetAccess
public
SetAccess
public
GetObservable
true
SetObservable
true

コールバック キューイング。'queue' または 'cancel' として指定します。BusyAction プロパティは MATLAB による割り込みコールバックの実行の処理方法を決定します。次の 2 つのコールバックの状態について考慮する必要があります。

  • "実行中" コールバックは、現在実行しているコールバックです。

  • "割り込み" コールバックは、実行中のコールバックに割り込もうとするコールバックです。

MATLAB がコールバックを呼び出すたびに、そのコールバックは実行中のコールバックに割り込もうとします。実行中のコールバックを所有するオブジェクトの Interruptible プロパティが、割り込みを許可するかどうかを決定します。割り込みが許可されない場合は、割り込みコールバックを所有するオブジェクトの BusyAction プロパティが、そのコールバックを破棄するかキューに入れるかを決定します。BusyAction プロパティは次の値を取ることができます。

  • 'queue' — 割り込みコールバックをキューに入れ、実行中のコールバックが終了した後に処理されるようにします。

  • 'cancel' — 割り込みコールバックを実行しません。

属性:

GetAccess
public
SetAccess
public
GetObservable
true
SetObservable
true

削除状態。matlab.lang.OnOffSwitchState 型の on/off logical 値として返されます。

MATLAB は、DeleteFcn コールバックが実行を開始すると、BeingDeleted プロパティを 'on' に設定します。コンポーネント オブジェクトが存在しなくなるまで BeingDeleted プロパティは 'on' に設定されたままです。

クエリや変更の前にオブジェクトが削除されようとしていないか確認するために BeingDeleted プロパティの値をチェックします。

属性:

GetAccess
public
SetAccess
protected
GetObservable
true
SetObservable
true
親/子

コンポーネントの親コンテナー。FigurePanelTab、または GridLayout オブジェクトとして指定します。

属性:

GetAccess
public
SetAccess
public
Transient
true
Dependent
true
NonCopyable
true
GetObservable
true
SetObservable
true

UI コンポーネントの子。空の GraphicsPlaceholder 配列として返されます。カスタム UI コンポーネントは子をもちません。このプロパティを設定しても効果はありません。

属性:

GetAccess
public
SetAccess
public
Transient
true
Dependent
true
NonCopyable
true

オブジェクト ハンドルの可視性。'on''callback' または 'off' として指定します。

このプロパティは、オブジェクトの親がもつ子のリストにおけるそのオブジェクトの可視性を制御します。オブジェクトがその親オブジェクトのリストで、子として可視できない場合、オブジェクト階層の検索またはプロパティのクエリによってオブジェクトを取得する関数は、そのオブジェクトを返しません。これらの関数には、getfindobjclf および close が含まれます。オブジェクトは参照できない場合も有効です。オブジェクトにアクセスできる場合は、そのプロパティを設定および取得して、それをオブジェクトに作用する任意の関数に渡すことができます。

HandleVisibility の値説明
'on' オブジェクトは常に参照できます。
'callback'オブジェクトはコールバック内から、あるいはコールバックにより呼び出される関数から参照できます。しかし、コマンド ラインから呼び出される関数からは参照できません。このオプションを使用すると、コマンド ラインからのオブジェクトへのアクセスがブロックされますが、コールバック関数からのアクセスは許可されます。
'off'オブジェクトは常に参照できません。このオプションは、他の関数による UI の意図しない変更を防止するために役立ちます。HandleVisibility'off' に設定すると、その関数の実行中にオブジェクトが一時的に非表示になります。

属性:

GetAccess
public
SetAccess
public
Dependent
true
GetObservable
true
SetObservable
true
識別子

UI コンポーネント オブジェクトのタイプ。コンポーネント名を含む文字ベクトルとして返されます。

属性:

GetAccess
public
SetAccess
protected
NonCopyable
true
Transient
true

オブジェクト識別子。文字ベクトルまたは string スカラーとして指定します。オブジェクトの識別子として機能する一意の Tag 値を指定できます。コードの他の部分からオブジェクトにアクセスする必要がある場合、関数 findobj を使用して Tag 値に基づいてオブジェクトを検索できます。

属性:

GetAccess
public
SetAccess
public
Dependent
true
GetObservable
true
SetObservable
true

ユーザー データ。任意の MATLAB 配列として指定します。たとえば、スカラー、ベクトル、行列、cell 配列、文字配列、table、または構造体を指定できます。このプロパティを使用して、任意のデータをオブジェクトに保存します。

App Designer を使用している場合は、UserData プロパティを使用する代わりに、アプリでパブリック プロパティまたはプライベート プロパティを作成してデータを共有します。詳細については、App Designer アプリ内でのデータの共有を参照してください。

属性:

GetAccess
public
SetAccess
public
Transient
true
GetObservable
true
SetObservable
true

メソッド

すべて展開する

すべて折りたたむ

4 つの値を入力して IP アドレスを形成するためのカスタム コンポーネントを作成する IPAddressComponent というクラスを定義します。

このクラスを定義するには、次の機能をもつ以下のクラス定義を含む IPAddressComponent.m というファイルを作成します。

  • IP アドレスを保存する Value パブリック プロパティ。

  • 4 つの数値編集フィールドを横一列に配置する NumericField および GridLayout プライベート プロパティ。

  • NumericField および GridLayout を初期化する setup メソッド。

  • IP アドレスの変更時に NumericField 値を更新する update メソッド。

  • 4 つの数値編集フィールドの値に基づいて Value プロパティを設定する handleNewValue メソッド。

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

次に、ComponentContainer クラスによって指定される IPAddressComponent コンストラクター メソッドを呼び出してコンポーネントを作成し、オブジェクトを h として返します。コンポーネントの値が変更された場合に、新しい IP アドレスをコマンド ウィンドウに表示する関数を指定します。

 h = IPAddressComponent;
 h.ValueChangedFcn = @(src,event) disp("Value changed to: " + num2str(h.Value));

IP アドレス 192.168.1.10 を編集フィールドに入力します。MATLAB® は更新された IP アドレスをコマンド ウィンドウに表示します。

詳細

すべて展開する

バージョン履歴

R2020b で導入