如何在 MATLAB 中声明 uicontrol 对象的继承

How to declare inheritance of uicontrol objects in MATLAB

我正在学习如何使用图形用户界面在 MATLAB 中以编程方式创建应用程序。我正在使用 MATLAB 2015a。

我不明白为什么会出现此错误:

Error using GuiTitle
The specified superclass 'uicontrol' contains a parse error, cannot be found on MATLAB's search path, or
is shadowed by another file with the same name.

我正在尝试创建一个名为 GuiTitle 的 class,它具有 uicontrol 作为超级class。我的 class GuiTitle 看起来像这样:

classdef GuiTitle < uicontrol
    methods
        function obj = GuiTitle(text)
            if nargin == 0
                text = '';
            end

            obj@uicontrol('Style', 'text', 'String', upper(text));
        end
    end   
end

这是我的代码:

function hello_gui
% Test GUI

GuiConstants % contains constants that 
GuiTitle %%

f = figure('Visible','off','Position',[POS_FROM_LEFT,POS_FROM_BOTTOM,...
                                       WINDOW_WIDTH,WINDOW_HEIGHT]);
set(f, 'MenuBar', 'none')

titleText    = 'process variable names';

%title = uicontrol('Style', 'text', 'String', upper(titleText));

title        = GuiTitle(titleText) %%

title.Position = [0, 0, WINDOW_WIDTH, WINDOW_HEIGHT];
title.FontSize = FONT_SIZE;

f.Visible = 'on';

end

当我用 %% 注释掉行并取消注释时

title = uicontrol('Style', 'text', 'String', upper(titleText));

window正确显示:

我错过了什么?

uicontrol 是一个创建类型为 matlab.ui.control.UIControl:

的对象的函数
h = uicontrol;
class(h)    % returns 'matlab.ui.control.UIControl'

不过这个class是封印的,不能当超级class:

classdef myclass < matlab.ui.control.UIControl
   ...
>> a=myclass
Error using myclass
Class 'matlab.ui.control.UIControl' is Sealed and may not be used as a superclass.

请注意,MATLAB 中的 GUIs 的设计与您在其他语言中可能使用的非常不同。无需派生自 UI classes 来更改它们的行为,您可以通过设置回调函数来定义它们的行为:

h = uicontrol;
h.String = 'button';
h.Callback = @(src,event) msgbox('pressed the button!');