Main Content

以编程方式向 App 设计工具添加 UI 组件

App 设计工具组件库中提供了大多数 UI 组件,您可以将它们拖放到画布上。有时,您可能需要在代码视图中以编程方式添加组件。以下是一些常见情况:

  • 创建在组件库中未提供的组件。例如,用于显示某对话框的 App 必须调用适当的函数来显示该对话框。

  • 根据运行时条件动态创建组件。

当您以编程方式添加 UI 组件时,您必须调用适当的函数来创建该组件,为该组件分配回调,然后将该回调编写为辅助函数。

创建组件并分配回调

调用在现有回调中创建组件的函数(有关 UI 组件函数的列表,请参阅 开发基于 uifigure 的 App)。StartupFcn 回调适用于创建组件,因为该回调会在 App 启动时运行。在其他情况下,您可以在不同回调函数中创建组件。例如,如果您要在用户按下按钮时显示对话框,请从按钮的回调函数内调用对话框函数。

当您调用函数来创建组件时,请将图窗或其子容器之一指定为父对象。例如,以下命令会创建一个按钮并将图窗指定为父对象。在本例中,该图窗具有 App 设计工具指定的默认名称 (app.UIFigure)。

b = uibutton(app.UIFigure);

接下来,将组件的回调属性指定为 @app.callbackname 形式的函数句柄。例如,此命令将按钮 bButtonPushedFcn 属性设置为名为 mybuttonpress 的回调函数。

b.ButtonPushedFcn = @app.mybuttonpress;

编写回调

将组件的回调函数编写为私有辅助函数。该函数必须将 appsrcevent 作为前三个参量。下面是作为私有辅助函数编写的回调的示例。

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

要编写接受附加输入参量的回调,请在前三个参量后指定附加参量。例如,以下回调接受两个附加输入 xy

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

要将此回调分配给一个组件,请将该组件的回调属性指定为元胞数组。该元胞数组中的第一个元素必须为函数句柄。后续元素必须为附加输入值。例如:

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

示例:使用 Close 函数的确认对话框

此 App 说明如何显示在对话框关闭时执行回调的确认对话框。

当用户点击窗口的关闭按钮 (X) 时,将显示一个对话框,要求用户确认是否要关闭 App。当用户确认关闭对话框时,将执行 CloseFcn 回调。

示例:基于数据文件填充树节点的 App

此 App 说明如何在运行时动态添加树节点。在 App 运行之前,树中存在三个医院节点。但在运行时,App 会在每个医院名称下添加几个子节点。子节点的数量和子节点上的标签由 patients.xls 电子表格的内容决定。

当用户点击树中的患者姓名时,患者信息面板将显示年龄、性别和健康状况等数据。该 App 将对数据的更改存储在一个表数组中。

相关主题