Main Content

setup

クラス: matlab.ui.componentcontainer.ComponentContainer
名前空間: matlab.ui.componentcontainer

コンポーネント コンテナー サブクラスのインスタンスの設定

R2020b 以降

構文

setup(obj)

説明

setup(obj) は UI コンポーネントの初期状態を設定します。これは、UI コンポーネント オブジェクトの作成時に、UI コンポーネントの親が割り当てられた後に 1 回実行されます。名前と値の引数として UI コンポーネントのコンストラクター メソッドに渡された他のプロパティ値はすべて、setup メソッドの実行後に代入されます。

このメソッドを定義して、クラスの新しいインスタンスごとに初期化コードを実行します。たとえば、このメソッドを使用すると、基となるグラフィックス オブジェクトを作成し、それらのオブジェクトで初期プロパティ値を設定できます。

入力引数

すべて展開する

matlab.graphics.componentcontainer.ComponentContainer 基底クラスから継承するクラスのオブジェクト。

属性

Abstracttrue
Protectedtrue

メソッドの属性の詳細については、メソッドの属性を参照してください。

すべて展開する

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 アドレスをコマンド ウィンドウに表示します。

ヒント

  • UI コンポーネント クラスの setup および update メソッド内で drawnow を呼び出さないでください。このような呼び出しを行うと、UI コンポーネントを使用するアプリ内で画面が予期せずに更新される可能性があります。代わりに、コンポーネントを使用するアプリ作成者が、画面の更新をトリガーする必要があるときにアプリ コード内で drawnow を呼び出すようにします。コンポーネント コード外部からこれらの呼び出しを行うと、ComponentContainer クラスを使用して作成されたものも含め、アプリ内のすべての UI コンポーネントが更新されます。

バージョン履歴

R2020b で導入