Как добавить "учебное сообщение div" к рисункам?

После установки R2018b первая открытая фигура содержала интересное сообщение (показано синим цветом):

Static image

Причина, по которой он интересен, заключается в том, что он содержит такие функции, как перенос текста, прозрачность, тот факт, что изображение сохраняет постоянную ширину, несмотря на изменение размера текста (это напомнило мне CSS3 flexbox, отсюда и тег) и т.д.

Animation

Последняя часть анимации находится в замедленном режиме, чтобы лучше показать, как размер 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)...), мне наконец удалось найти нужный компонент. Вот что я узнал:

  1. Этот компонент называется InfoPanel и является частью MATLAB Java API. Само определение класса находится в:

    MATLAB/R2018b/java/jar/hg.jar!/com/mathworks/hg/util/InfoPanel.class
    
  2. Чтобы это появилось, нам нужно вызвать 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 );
    
  3. Параметр MATLAB, который управляет тем, должно ли это появиться, является showinteractioninfobar внутри XML <prefdir>/matlab.settings.

  4. Похоже, что "интересные части" InfoPanel являются частными, что означает, что она позволяет выполнять практически любые настройки (в основном некоторые цвета; не строка или значок), но сделать копию этого класса и выставить все элементы должно быть довольно легко. нам нужно.