Чтобы расширить ваш пользовательский компонент пользовательского интерфейса использование сторонней визуализации или виджетов, создайте класс компонента, который содержит 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 | Задайте Для получения дополнительной информации об определении свойств смотрите Manage Properties Пользовательских Компонентов пользовательского интерфейса. |
properties (Access = private, Transient, NonCopyable) HTMLComponent matlab.ui.control.HTML end | Задайте |
events (HasCallbackProperty, NotifyAccess = protected) % Generate a ButtonPushedFcn callback property ButtonPushed end | Задайте |
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 | Задайте Затем создайте компонент 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 | Закройте |
RoundButton.html
Исходное определениеИсточник HTML | Обсуждение |
---|---|
<!DOCTYPE html> <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:
|
<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; }); | Добавьте прослушиватель события |
button = document.getElementById("roundButton"); button.addEventListener("click", function(event) { htmlComponent.Data.Clicked = true; htmlComponent.Data = htmlComponent.Data; }); | Добавьте прослушиватель события кнопки HTML. Этот прослушиватель события прислушивается к элементу кнопки, по которому кликнут. Когда пользователь нажимает кнопку, функцию:
|
} </script> </head> | Закройте setup функционируйте и <script> и <head> теги. |
<body> <button id="roundButton"></button><br/> </body> | Создайте элемент кнопки в теле документа HTML. |
</html> | Закройте <html> тег. |
После создания и сохранения 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
.