12

安装 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(from mlservices.jar),这会打开帮助浏览器。
4

1 回答 1

8

在对 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 设置位于XMLshowinteractioninfobar内部。<prefdir>/matlab.settings

  4. 看起来“有趣的部分”InfoPanel是私有的,这意味着它几乎不允许任何自定义(主要是一些颜色;不是字符串或图标),但是制作这个类的副本并公开我们的所有元素应该相当容易需要。

于 2018-11-19T20:30:22.917 回答