Настройка свойств HTML UI Компонента

Чтобы расширить пользовательский компонент с помощью визуализаций или виджетов сторонних производителей, создайте класс компонента, который содержит компонент пользовательского интерфейса HTML. Используйте компонент HTML UI для настройки внешнего вида компонента и для взаимодействия с библиотеками сторонних производителей, а также класс компонента для определения свойств компонентов и коллбэков, которые может задать пользователь.

Обзор конструкции классов

Чтобы создать пользовательский класс компонента пользовательского интерфейса, который использует компонент пользовательского интерфейса HTML, необходимо создать два файла.

  • Файл класса UI-компонента - В этом файле вы задаете свой класс компонента. Вы задаете его свойства, значения его свойств, события, которые он слушает, и функции обратного вызова, которые он запускает. Его свойства должны включать тот, который будет содержать компонент HTML UI.

  • Исходный файл HTML - В этом файле вы конфигурируете и обновляете визуальный внешний вид компонента UI, слушаете пользовательские взаимодействия и передаете информацию о том, что взаимодействие произошло в класс компонента UI.

Ваш код должен сообщать изменения значениям свойств и взаимодействиям пользователей через эти два файла.

Включите ответ на обновления свойств

Поскольку файл класса компонента пользовательского интерфейса задает свойства, которые могут задать пользователи, но исходный файл HTML управляет визуальным стилем компонента, эти два файла должны сообщаться об обновлениях свойств.

В файле класса компонента пользовательского интерфейса сконфигурируйте свойства компонента пользовательского интерфейса. Задайте свойства, которые пользователи могут задать, определив их как общественная собственность в properties блок. В update метод вашего класса, храните значения общественной собственности как поля в struct в Data свойство компонента пользовательского интерфейса HTML. Это предоставляет исходному файлу HTML доступ к этим значениям свойств.

В исходном файле HTML используйте значения свойств для обновления внешнего вида компонента HTML UI. Для этого в setup функция внутри <script> тег, доступ к значениям полей в Data и использовать их для изменения свойств стиля элементов HTML.

Включите ответ на пользовательские взаимодействия

Пользователи определяют функции обратного вызова компонента в MATLAB®, но эти коллбэки часто слушают ответ на действие, выполненное с элементом HTML, заданным в исходном файл. Таким образом, эти два файла также должны сообщаться о пользовательских взаимодействиях.

В файле класса компонента пользовательского интерфейса сначала создайте свойства коллбэка вашего компонента пользовательского интерфейса. Создайте events блок со HasCallbackProperty. Когда вы задаете событие в этом блоке, MATLAB создает связанное свойство общего коллбэка для компонента пользовательского интерфейса. Для примера, если вы создаете событие с именем ButtonPushed, это автоматически создаст общественную собственность для вашего класса с именем ButtonPushedFcn.

Чтобы выполнить пользовательскую функцию обратного вызова, связанную с пользовательским взаимодействием, ваш код должен сначала распознать, когда произошло пользовательское взаимодействие. В файле класса компонента пользовательского интерфейса предоставьте компоненту пользовательского интерфейса HTML способ сделать это. В setup метод, установите Data свойство компонента пользовательского интерфейса HTML для struct с полем для хранения информации о том, произошло ли взаимодействие. Поскольку файл класса и исходный файл HTML совместно используют это свойство и его значение, исходный файл HTML может обновить значение, чтобы передать статус взаимодействия пользователя классу компонента пользовательского интерфейса. Для этого в исходном файле HTML в setup функция внутри <script> тег, создайте прослушиватель событий, который прослушивает взаимодействие с пользователем. Когда прослушиватель обнаружит взаимодействие, обновите Data свойство компонента HTML UI.

После того, как файл класса компонента пользовательского интерфейса получит информацию о том, что произошло взаимодействие с пользователем, он должен затем инициировать событие, связанное с взаимодействием. Создайте метод класса для этого. В методе класса сначала вызовите встроенный notify метод, чтобы вызвать событие, которое вы определили. Это выполняет пользовательскую функцию обратного вызова, связанную с событием. Затем установите Data свойство компонента HTML, чтобы дождаться другого взаимодействия. В setup метод файла класса UI компонента, установите DataChangedFcn свойство HTML компонента к определенному вам методу класса. Компонент пользовательского интерфейса HTML выполняет этот метод автоматически каждый раз, когда Data изменения свойств. Поэтому после обновления исходного файла HTML Data свойство, чтобы сообщить, что взаимодействие произошло, этот метод выполняет соответствующий коллбэк.

RoundButton Реализация класса

Этот пример демонстрирует типовую структуру для записи пользовательского класса пользовательского интерфейса, который использует компонент пользовательского интерфейса HTML. Класс создает кнопку с пользовательским закругленным стилем. Он позволяет пользователям задавать цвет кнопки, текст, цвет текста и ответ по клику.

Чтобы определить свой класс компонента пользовательского интерфейса, создайте два файла в одной папке по пути MATLAB:

  • RoundButton.m - определение класса компонента

  • RoundButton.html - Исходный файл HTML

RoundButton.m Определение класса

RoundButton классОбсуждение
classdef RoundButton < matlab.ui.componentcontainer.ComponentContainer
Создайте пользовательский компонент пользовательского интерфейса с именем RoundButton путем определения подкласса matlab.ui.componentcontainer.ComponentContainer класс.
    properties
        Color {mustBeMember(Color, ...
            {'white','blue','red','green','yellow'})} = 'white'
        FontColor {mustBeMember(FontColor, ...
            {'black','white'})} = 'black'
        Text (1,:) char = 'Button';
    end

Определите Color, FontColor, и Text общественная собственность для вашего RoundButton класс. Это свойства, которые пользователь может задать при создании RoundButton образец.

Дополнительные сведения об определении свойств см. в разделе Управление свойствами пользовательских компонентов пользовательского интерфейса.

    properties (Access = private, Transient, NonCopyable)
        HTMLComponent matlab.ui.control.HTML
    end

Определите HTMLComponent Частная собственность для хранения компонента HTML UI.

    events (HasCallbackProperty, NotifyAccess = protected)
        % Generate a ButtonPushedFcn callback property
        ButtonPushed
    end

Задайте ButtonPushed событие в events блок. Задайте HasCallbackProperty для events блок для автоматической генерации ButtonPushedFcn общественная собственность для класса.

    methods (Access=protected)
Создайте methods блок.
        function setup(obj)
            % Set the initial position of this component
            obj.Position = [100 100 80 40];

            % Create the HTML component
            obj.HTMLComponent = uihtml(obj);
            obj.HTMLComponent.Position = [1 1 obj.Position(3:4)];
            obj.HTMLComponent.HTMLSource = fullfile(pwd,'RoundButton.html');
            obj.HTMLComponent.Data = struct('Clicked',false);
            obj.HTMLComponent.DataChangedFcn = @(s,e)notifyClick(obj);
        end

Определите setup метод для вашего класса. В рамках метода установите начальное положение вашего компонента относительно его родительского контейнера.

Затем создайте HTML компонента путем вызова uihtml функция. Установите следующие свойства для вашего HTML компоненту:

  • Position - положение компонента HTML относительно положения пользовательского компонента пользовательского интерфейса.

  • HTMLSource - исходный файл, содержащий разметку HTML для компонента HTML.

  • Data - a struct с Clicked поле со значением false. Код в исходном файле HTML устанавливает это поле на true при клике по HTML компонента.

  • DataChangedFcn - анонимная функция, которая вызывает метод класса с именем notifyClick. Эта функция запускается, когда Data свойство изменения HTML компонента.

        function update(obj)
            % Update the HTML component data
            obj.HTMLComponent.Data.Color = obj.Color;
            obj.HTMLComponent.Data.FontColor = obj.FontColor;
            obj.HTMLComponent.Data.Text = obj.Text;
            obj.HTMLComponent.Position = [1 1 obj.Position(3:4)];
        end
Определите update метод для вашего класса. В рамках метода сохраните значения Color, FontColor, и Text свойства как поля в Data свойство компонента HTML. Это позволяет обновлять атрибуты элемента кнопки HTML и позволяет компоненту HTML прослушивать изменение этих свойств.
        function notifyClick(obj)
            if obj.HTMLComponent.Data.Clicked
                obj.HTMLComponent.Data.Clicked = false;
                drawnow
                notify(obj,'ButtonPushed');
            end
        end
Определите функцию, которая запускается, когда Data изменения свойств, который называется notifyClick. Функция сначала проверяет, Clicked ли поле данных компонента HTML true. Если это так, функция устанавливает Clicked поле данных для false чтобы дождаться следующего нажатия кнопки. Функция также запускает ButtonPushed событие, которое, в свою очередь, выполняет пользовательскую ButtonPushedFcn свойство.
    end
end

Закройте methods блок и определение класса.

RoundButton.html Определение источника

Исходный код HTMLОбсуждение
<!DOCTYPE html>
<html>
<head>

Откройте <html> тег и <head> тег.

<style>
html, body {
  height: 100%;
  text-align: center;
}

button {
  width: 100%;
  height: 100%;
  border-radius: 2em;
  font-size: 1em;
  cursor: pointer;
  border: none;
}

button:focus {
  outline: 0;
}
</style>

Определите стиль для HTML содержимого с помощью разметки CSS:

  • Установите высоту тела HTML в масштабе, чтобы заполнить весь контейнер, в котором оно отображается.

  • Задайте относительный размер кнопки в теле документа, радиус ребер кнопки, размер шрифта, стиль курсора при указании на кнопку и стиль границы кнопки.

  <script type="text/javascript">
    function setup(htmlComponent) {
Написание setup функция внутри <script> тег для подключения вашего JavaScript® объект, называемый htmlComponent, к компоненту пользовательского интерфейса HTML, созданному в MATLAB.
    htmlComponent.addEventListener("DataChanged", function(event) {
      buttonElement = document.getElementById("roundButton");
      buttonElement.style.backgroundColor = htmlComponent.Data.Color;
      buttonElement.innerHTML = htmlComponent.Data.Text;
      buttonElement.style.color = htmlComponent.Data.FontColor;
    });

Добавить прослушиватель событий в htmlComponent Объект JavaScript. Этот прослушиватель события слушает любое изменение в Data свойство HTMLComponent Объект MATLAB, а затем обновляет атрибуты элемента кнопки HTML в соответствии с RoundButton значения свойств.

    button = document.getElementById("roundButton");  
    button.addEventListener("click", function(event) {
      htmlComponent.Data.Clicked = true;
      htmlComponent.Data = htmlComponent.Data;
    });

Добавьте прослушиватель событий к кнопке HTML. Этот прослушиватель событий прослушивает нажатие кнопки на элементе. Когда пользователь нажимает кнопку, функция:

  • Обновляет Clicked поле данных компонента HTML для true

  • Явным образом установите Data свойство компонента HTML. Это уведомляет объект MATLAB HTML компонента для выполнения DataChangedFcn коллбэк.

    }
  </script>
</head>
Закройте setup функции и <script> и <head> теги.
  <body>
    <button id="roundButton"></button><br/> 
  </body>
Создайте элемент кнопки в теле HTML.
</html>
Закройте <html> тег.

Создайте образец RoundButton

После создания и сохранения RoundButton.m и RoundButton.html, создайте образец RoundButton класс в фигуре пользовательского интерфейса.

Задайте Color, FontColor, и ButtonPushedFcn свойства коллбэка как аргументы имя-значение.

fig = uifigure('Position',[200 200 300 300]);
btn = RoundButton(fig, ...
    'Color','red', ...
    'FontColor','white', ...
    'ButtonPushedFcn',@(o,e)disp('Clicked'));

Нажмите кнопку. В Командном окне отображаются Clicked.

См. также

Классы

Функции

Похожие темы