Чтобы расширить ваш пользовательский компонент пользовательского интерфейса использование сторонней визуализации или виджетов, создайте класс компонента, который содержит 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 метод для вашего класса. В рамках метода сохраните значения 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 | Закройте |
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 класс в фигуре пользовательского интерфейса.
Задайте ColorFontColor , и ButtonPushedFcn свойства коллбэка как аргументы name-value.
fig = uifigure('Position',[200 200 300 300]); btn = RoundButton(fig, ... 'Color','red', ... 'FontColor','white', ... 'ButtonPushedFcn',@(o,e)disp('Clicked'));

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