Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

matlab.ui.componentcontainer.ComponentContainer クラス

パッケージ: matlab.ui.componentcontainer

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

説明

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

classdef MyComponent < matlab.ui.componentcontainer.ComponentContainer

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

クラスの属性

抽象型
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'

'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'

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

RGB 3 成分16 進数カラー コード外観
[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
対話機能

可視性の状態。'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 オブジェクトとして指定します。このプロパティは、コンポーネントを右クリックしたときにコンテキスト メニューを表示するために使用します。

属性:

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
コールバック実行制御

コールバックの割り込み。'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 またはコンポーネント オブジェクトの 1 次元配列として返されます。任意の UI コンポーネント オブジェクトを UI コンポーネント オブジェクトの子にすることができます。

UI コンポーネントの Children プロパティを使用して、子コンポーネントの追加または削除を行うことはできません。Children プロパティ値は、子のリストの表示や子の並べ替えに使用します。プロパティ値の配列内での子の順序は、画面上のコンポーネントの前から後ろへの順序 (重なり順序) を反映します。

このリストに子を追加するには、子コンポーネントの Parent プロパティを UI コンポーネントに設定します。

属性:

GetAccess
public
SetAccess
public
Transient
true
Dependent
true
NonCopyable
true

コンポーネント オブジェクト ハンドルを、オブジェクト ハンドルの親に対する子のリストに表示するかどうか。次のいずれかの値として指定します。

  • 'on' — コンポーネント オブジェクト ハンドルは常に表示されます。

  • 'off' — コンポーネント オブジェクト ハンドルは常に非表示です。このオプションは、他の関数によるコンポーネントの意図しない変更を防止するために役立ちます。その関数の実行中にハンドルを一時的に非表示にするには、HandleVisibility'off' に設定します。

  • 'callback' — コンポーネント オブジェクト ハンドルはコールバック内から、あるいはコールバックにより呼び出される関数から参照できます。しかし、コマンド ラインから呼び出される関数からは参照できません。このオプションは、コマンド ウィンドウ内のオブジェクトへのアクセスをブロックしますが、コールバック関数にはアクセスを許可します。

オブジェクトがコンポーネントの親オブジェクトの Children プロパティ内にリストされていない場合、オブジェクト階層の検索またはハンドル プロパティのクエリによってオブジェクト ハンドルを取得する関数は、そのオブジェクト ハンドルを返すことができません。このような関数には、getfindobjgcagcfgconewplotclaclfclose があります。

非表示のオブジェクト ハンドルは有効なままです。ルートの ShowHiddenHandles プロパティを 'on' に設定すると、HandleVisibility プロパティの設定にかかわらず、すべてのオブジェクト ハンドルがリストされます。

属性:

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,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

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

 h = IPAddressComponent;
 h.ValueChangedFcn = @(o,e) disp(['Value changed to: ', num2str(h.Value)]);

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

詳細

すべて展開する

R2020b で導入