Настройте свойства 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

Задайте ColorFontColor , и Text публичные свойства для вашего RoundButton класс. Это свойства, которые пользователь может установить при создании RoundButton экземпляр.

Для получения дополнительной информации об определении свойств смотрите Manage Properties Пользовательских Компонентов пользовательского интерфейса.

    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.

  • Datastruct с 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 метод для вашего класса. В рамках метода сохраните значения ColorFontColor , и 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 'callback'.

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

Создайте экземпляр RoundButton

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

Задайте ColorFontColor , и ButtonPushedFcn свойства коллбэка как аргументы name-value.

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

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

Смотрите также

Классы

Функции

Похожие темы