Как добавить "учебное сообщение div" к рисункам?
После установки R2018b первая открытая фигура содержала интересное сообщение (показано синим цветом):
Причина, по которой он интересен, заключается в том, что он содержит такие функции, как перенос текста, прозрачность, тот факт, что изображение сохраняет постоянную ширину, несмотря на изменение размера текста (это напомнило мне CSS3 flexbox, отсюда и тег) и т.д.
Последняя часть анимации находится в замедленном режиме, чтобы лучше показать, как размер div соответствует размеру фигуры.
В случае, если это имеет значение, я использую Win 10 v1803.
Вопрос:
Я хотел бы знать, как мы можем нарисовать похожие, нестандартные, div-ы (из-за отсутствия лучшего слова) в наших цифрах. (Важно подчеркнуть, что это не UIFigure
!)
Что я нашел до сих пор:
-
Ссылка " Узнать больше" открывает страницу:
web(fullfile(docroot, 'matlab/creating_plots/interactively-explore-plotted-data.html'))
все же точки останова в точках входа в web
или docroot
(или даже doc
) не достигаются.
-
Предполагая, что этот элемент является Child
элементом фигуры, я попытался найти для него дескриптор:
>> set(gcf,'MenuBar','none'); findall(gcf)
ans =
22×1 graphics array:
Figure (1)
ContextMenu
AnnotationPane
Axes
AxesToolbar
Text
Text
Text
ToolbarStateButton (Brush/Select Data)
ToolbarStateButton (Data Tips)
ToolbarStateButton (Rotate 3-D)
ToolbarStateButton (Pan)
ToolbarStateButton (Zoom In)
ToolbarStateButton (Zoom Out)
ToolbarPushButton (Restore View)
Button
Button
Button
Button
Button
Button
Button
однако, делая эти элементы управления невидимыми, используя set(h(2:end), 'Visible', false)
, не заставляет div исчезнуть.
-
Сохранение рисунка как .fig
или генерация кода для него не оставляет следов этого div.
-
Когда uiinspect
-ing рисунок, этот div не отображается (или, по крайней мере, я не смог его найти).
-
Я не знаю, что именно я сделал, чтобы он снова появился снова, но так как он должен появиться при первой загрузке R2018b, я подозреваю, что удаление prefdir
(очевидно, после его резервного копирования) и перезапуск MATLAB может вернуть его обратно,
- Единственное, что я еще не пробовал, - это подключить Java-отладчик к MATLAB и попытаться отследить вызывающего абонента до
com.mathworks.mlservices.MLHelpServices.setCurrentLocation
(из mlservices.jar
), который открывает браузер справки.
Ответы
Ответ 1
После некоторого изучения Java-вещей (начиная с findjobj
, за которым следует множество .getComponent(0).getComponent(0)...
), мне наконец удалось найти нужный компонент. Вот что я узнал:
-
Этот компонент называется InfoPanel
и является частью MATLAB Java API. Само определение класса находится в:
MATLAB/R2018b/java/jar/hg.jar!/com/mathworks/hg/util/InfoPanel.class
-
Чтобы это появилось, нам нужно вызвать static
метод addBannerPanel
, передав ему дескриптор рисунка:
com.mathworks.hg.util.InfoPanel.addBannerPanel( figure(randi(1E4)) );
Или другая подпись, которая также принимает пользовательскую панель:
jIP = com.mathworks.hg.util.InfoPanel;
jIP.setBackground(java.awt.Color(0.8, 0.7, 0.1));
com.mathworks.hg.util.InfoPanel.addBannerPanel( figure(randi(1E4)), jIP );
-
Параметр MATLAB, который управляет тем, должно ли это появиться, является showinteractioninfobar
внутри XML <prefdir>/matlab.settings
.
-
Похоже, что "интересные части" InfoPanel
являются частными, что означает, что она позволяет выполнять практически любые настройки (в основном некоторые цвета; не строка или значок), но сделать копию этого класса и выставить все элементы должно быть довольно легко. нам нужно.