exponenta event banner

Настройка свойств компонента пользовательского интерфейса HTML

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

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

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

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

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

Код должен передавать изменения значений свойств и взаимодействия пользователей между этими двумя файлами.

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

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

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

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

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

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

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

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

После того как файл класса компонента пользовательского интерфейса получит информацию о том, что произошло взаимодействие пользователя, он должен запустить событие, связанное с взаимодействием. Создайте метод класса для этого. В методе класса сначала вызовите встроенный notify для запуска определенного события. При этом выполняется пользовательская функция обратного вызова, связанная с событием. Затем установите Data свойство компонента HTML ожидает другого взаимодействия. В setup метода файла класса компонента пользовательского интерфейса, установите 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.

    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. Это уведомляет объект HTML-компонента MATLAB о необходимости выполнения 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.

См. также

Классы

Функции

Связанные темы