Main Content

プログラムによる App Designer への UI コンポーネントの追加

ほとんどの UI コンポーネントは、App Designer の [コンポーネント ライブラリ] で入手し、キャンバスにドラッグ アンド ドロップできます。場合によっては、コード ビューでコンポーネントをプログラムによって追加する必要があります。一般的な例は次のとおりです。

  • [コンポーネント ライブラリ] で入手できないコンポーネントの作成。たとえば、ダイアログ ボックスを表示するアプリでは、ダイアログ ボックスを表示するための適切な関数を呼び出さなければなりません。

  • 実行時の条件に従ってコンポーネントを動的に作成。

プログラムによって UI コンポーネントを追加する場合は、コンポーネントの作成に適切な関数を呼び出し、コンポーネントにコールバックを割り当てて、そのコールバックを補助関数として作成しなければなりません。

コンポーネントの作成とコールバックの割り当て

既存のコールバック内から、コンポーネントを作成する関数を呼び出します (UI コンポーネント関数のリストは、uifigure ベースのアプリの開発を参照)。StartupFcn コールバックは、アプリの起動時に実行されるため、コンポーネントの作成場所として適しています。別のコールバック関数内でコンポーネントを作成する場合もあります。たとえば、ユーザーがあるボタンを押したときにダイアログ ボックスを表示する場合は、そのボタンのコールバック関数内からダイアログ ボックス関数を呼び出します。

コンポーネントを作成する関数を呼び出すときは、Figure またはその子コンテナーの 1 つを親オブジェクトとして指定します。たとえば、次のコマンドはボタンを作成し、Figure を親オブジェクトとして指定します。ここでは、Figure は App Designer が割り当てる既定の名前 (app.UIFigure) をもっています。

b = uibutton(app.UIFigure);

次に、コンポーネントのコールバック プロパティを、@app.callbackname 形式の関数ハンドルとして指定します。たとえば、次のコマンドは、ボタン bButtonPushedFcn プロパティを mybuttonpress という名前のコールバック関数に設定します。

b.ButtonPushedFcn = @app.mybuttonpress;

コールバックの作成

コンポーネントのコールバック関数を、プライベート補助関数として作成します。関数の最初の 3 つの引数は、appsrc および event でなければなりません。プライベート補助関数として作成したコールバックの例は次のとおりです。

methods (Access = private)
    
        function mybuttonpress(app,src,event)
            disp('Have a nice day!');
        end
        
end

追加の入力引数を受け入れるコールバックを作成するには、最初の 3 つの引数の後に追加の引数を指定します。たとえば、次のコールバックは、追加の入力として xy の 2 つを受け入れます。

methods (Access = private)
    
        function addxy(app,src,event,x,y)
            disp(x + y);
        end
        
end

このコールバックをコンポーネントに割り当てるには、コンポーネントのコールバック プロパティを cell 配列として指定します。cell 配列内の 1 番目の要素は関数ハンドルでなければなりません。その後の要素は追加の入力値でなければなりません。以下に例を示します。

b.ButtonPushedFcn = {@app.addxy,10,20};

例: クローズ関数を含む確認ダイアログ ボックス

このアプリでは、ダイアログ ボックスが閉じるときにコールバックを実行する確認ダイアログ ボックスの表示方法を示します。

ユーザーがウィンドウの閉じるボタン (X) をクリックすると、アプリを閉じることを確認するダイアログ ボックスが表示されます。ユーザーがダイアログ ボックスを閉じると、CloseFcn コールバックが実行されます。

例: データ ファイルに基づいてツリー ノードを追加するアプリ

このアプリでは、実行時にツリー ノードを動的に追加する方法を示します。アプリの実行前、ツリーには 3 つの病院ノードが存在します。しかし、実行時には、アプリによって各病院名の下に子ノードがいくつか追加されます。子ノードの数と子ノードのラベルは、patients.xls スプレッドシートの内容によって決まります。

ユーザーがツリーで患者名をクリックすると、[Patient Information] パネルに年齢、性別、健康状態などのデータが表示されます。アプリはデータの変更を table 配列に保存します。

関連するトピック