Как добавить «учебное сообщение div» к рисункам? - PullRequest
0 голосов
/ 19 ноября 2018

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

Static image

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

Animation

Последняя часть анимации находится в замедленном режиме, чтобы лучше показать, как размер div соответствует размеру рисунка.

В случае, если это имеет значение, я использую Win 10 v1803.

Вопрос:

Я хотел бы знать, как мы можем рисовать похожие, пользовательские, деления (из-за отсутствия лучшего слова) в наших цифрах .(Важно подчеркнуть, что это не a UIFigure!)


Что я нашел до сих пор:

  • The Узнать больше * Ссылка 1038 * открывает страницу:

    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 - на рисунке, этот div не отображается (или, по крайней мере, I не может его найти).

  • Я не знаю, что именно я сделал, чтобы он снова появился, но так как он должен появиться при первой загрузке R2018b, я подозреваю, что удаляю prefdir (очевидно, после резервного копированияэто) и перезапуск MATLAB кулверните его обратно.

  • Единственное, что я еще не пробовал, - это подключить Java-отладчик к MATLAB и попытаться отследить вызывающего до com.mathworks.mlservices.MLHelpServices.setCurrentLocation (из mlservices.jar), чтооткрывает браузер справки.

1 Ответ

0 голосов
/ 19 ноября 2018

После некоторого изучения Java-вещей (начиная с findjobj, за которым следует множество .getComponent(0).getComponent(0)...), мне наконец удалось найти нужный компонент.Вот что я узнал:

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

    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 внутри <prefdir>/matlab.settings XML.

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

...