addChild для компонентов uifigure - PullRequest
1 голос
/ 08 ноября 2019

Я пытаюсь разработать свои первые графические интерфейсы с uifigure (программно, а не с appdesigner [но я добавил его в качестве ключевого слова, поскольку оно связано]), и (как и ожидалось) я пропускаю некоторыерасширенных функций и виджетов, предоставляемых GUI Layout Toolbox и Widgets Toolbox для стандартных символов Java.

Таким образом, я попытался изменить некоторые виджеты, которые ябыл разработан до uifigure, и uigridlayout кажется весьма удобным для замены uix.VBox и uix.HBox из GUI Layout Toolbox.

Для стандартных Java-фигур предположим, что у меня есть класс MyWidget и соответствующий ему экземпляр mywidget. MyWidget будет, наконец, предком matlab.ui.container.internal.UIContainer, который предоставляет метод addChild, который можно переопределить для настройки поведения

  uicontrol(mywidget)

Я ищу то же самое для uifigureкомпоненты. Предположим, что следующий класс получен из matlab.ui.container.GridLayout, который является классом результата uigridlayout вызова.

classdef MyGrid < matlab.ui.container.GridLayout
    methods
        function self = MyGrid(varargin)
            self = self@matlab.ui.container.GridLayout(varargin{:});
        end
    end
    methods ( Access = protected )

        function addChild(self, child)
            disp('hooray');
            addChild@matlab.ui.container.GridLayout(self, child);
        end
    end
end

Когда я сейчас инициирую MyGrid экземпляр

g = MyGrid()

все выглядит хорошо:

g = 

  MyGrid with properties:

    RowHeight: {'1x'  '1x'}
    ColumnWidth: {'1x'  '1x'}

, но добавление дочернего элемента к нему не вызывает метод addChild:

>> uibutton(g)

ans = 

  Button (Button) with properties:

               Text: 'Button'
               Icon: ''
    ButtonPushedFcn: ''
           Position: [100 100 100 22]

Примечание. Нет вывода hooray выше. Свойство Parent является правильным:

>> ans.Parent

ans = 

  MyGrid with properties:

      RowHeight: {'1x'  '1x'}
    ColumnWidth: {'1x'  '1x'}

  Show all properties

Исходя из этого, я предполагаю, что addChild - это не метод, используемый (по крайней мере, matlab.ui.container.GridLayout) для добавления потомка.

Кто-нибудь знает механизм добавления дочернего элемента в контейнер в компоненте uifigure?

1 Ответ

1 голос
/ 08 ноября 2019

Я не знаю, почему я вчера туда не заглянул, но код matlab.ui.container.GridLayout имеет (защищенный) метод

function handleChildAdded(obj, childAdded)
    obj.processChildAdded(childAdded);

    obj.addChildLayoutPropChangedListener(childAdded);

    obj.updateImplicitGridSize('childAdded', childAdded);

    obj.updateLastCell('childAdded', childAdded);
end

Метод processChildAdded может быть лучше для моих целей, но является частным. Во всяком случае, handleChildAdded работает:

classdef MyGrid < matlab.ui.container.GridLayout
    methods
        function self = MyGrid(varargin)
            self = self@matlab.ui.container.GridLayout(varargin{:});
        end
    end
    methods ( Access = protected )
        function handleChildAdded(self, child)
            disp('hooray');
            handleChildAdded@matlab.ui.container.GridLayout(self, child);
        end
    end
end
>> g=MyGrid();
>> uibutton(g);
hooray
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...