安装 R2018b 后,我打开的第一个图包含一条有趣的消息(以蓝色显示):
之所以有趣,是因为它包含文本换行、透明度、图像保持恒定宽度即使文本调整大小(这让我想起了 CSS3 flexbox,因此是标签)等特性。
动画的最后一部分是慢动作,以更好地显示 div 的大小如何跟随图形的大小。
以防万一,我使用的是 Win 10 v1803。
问题:
我想知道如何在我们的图形中绘制类似的、自定义的divs(找不到更好的词) >。 (需要强调的是,这不是UIFigure
!)
到目前为止我发现了什么:
Learn More链接打开页面:
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 没有显示(或者至少,我找不到它)。我不知道我究竟做了什么让它再次出现,但由于它设置为在您第一次启动 R2018b 时出现,我怀疑删除
prefdir
(显然,备份后)并重新启动 MATLAB 可以将其恢复。- 我唯一没有尝试的是将 Java 调试器附加到 MATLAB 并尝试跟踪调用者到
com.mathworks.mlservices.MLHelpServices.setCurrentLocation
(来自mlservices .jar
),打开帮助浏览器。
最佳答案
在对 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
在<prefdir>/matlab.settings
里面XML。看来
InfoPanel
的“有趣部分”是私有(private)的,这意味着它几乎不允许任何自定义(主要是一些颜色;不是字符串或图标),但是制作此类的副本并公开我们需要的所有元素应该相当容易。
关于matlab - 如何将 "tutorial message div"添加到数字中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53378410/