matlab - 如何将 "tutorial message div"添加到数字中?

标签 matlab flexbox matlab-figure matlab-gui undocumented-behavior

安装 R2018b 后,我打开的第一个图包含一条有趣的消息(以蓝色显示):

Static image

之所以有趣,是因为它包含文本换行、透明度、图像保持恒定宽度即使文本调整大小(这让我想起了 CSS3 flexbox,因此是标签)等特性。

Animation

动画的最后一部分是慢动作,以更好地显示 div 的大小如何跟随图形的大小。

以防万一,我使用的是 Win 10 v1803。

问题:

我想知道如何在我们的图形中绘制类似的、自定义的divs(找不到更好的词) >。 (需要强调的是,这不是UIFigure!)


到目前为止我发现了什么:

  • Learn More链接打开页面:

    web(fullfile(docroot, 'matlab/creating_plots/interactively-explore-plotted-data.html'))
    

    webdocroot(甚至 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 没有显示(或者至少,找不到它)。

  • 我不知道我究竟做了什么让它再次出现,但由于它设置为在您第一次启动 R2018b 时出现,我怀疑删除 prefdir(显然,备份后)并重新启动 MATLAB 可以将其恢复。

  • 我唯一没有尝试的是将 Java 调试器附加到 MATLAB 并尝试跟踪调用者到 com.mathworks.mlservices.MLHelpServices.setCurrentLocation(来自 mlservices .jar),打开帮助浏览器。

最佳答案

在对 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<prefdir>/matlab.settings里面XML。

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

关于matlab - 如何将 "tutorial message div"添加到数字中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53378410/

相关文章:

matlab - 如何创建文章质量的 3-D 图?

matlab - MATLAB 中的曲线拟合 : different result form toolbox vs command line?

html - 使用 display flex 在图像顶部垂直对齐 bootstrap btn

matlab - 在 2D 空间中旋转 Spring

matlab - 如何在matlab中的散点图上显示颜色渐变?

matlab - 3D直方图和条件着色

java - 在 MATLAB 中解析 XML 字符串

css - Angular 2 Flex 布局右对齐图标

css - 如何使 2 个元素适合页面高度?

matlab - 动态图例(每次递归更新)