安装R2018b后,我打开的第一个数字包含一条有趣的消息(以蓝色显示):
之所以有趣,是因为它包含诸如文本换行,透明性,即使文本调整大小后图像仍保持恒定宽度的功能(这使我想起了CSS3 flexbox,因此还有标签)等。
动画的最后一部分是慢动作,以更好地显示div的大小如何跟随图形的大小。
如果有问题,我正在使用Win 10 v1803。
我想知道我们如何在我们的图形中绘制相似的,自定义的 div (由于缺少更好的用词) >。 (必须强调的是,这不是不是 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不会显示(或至少 I 找不到)。
我不知道该怎么做才能使其再次出现,但是由于它设置为首次启动R2018b时出现,因此我怀疑删除了prefdir
(显然,在备份之后并重新启动MATLAB可以将其恢复。
com.mathworks.mlservices.MLHelpServices.setCurrentLocation
(来自mlservices.jar
),这将打开帮助浏览器。答案 0 :(得分:7)
深入研究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
XML内的<prefdir>/matlab.settings
。
看来InfoPanel
的“有趣部分”是私有的,这意味着它几乎不允许进行任何自定义(主要是某些颜色;不是字符串或图标),但是应该相当容易复制该类并暴露我们需要的所有元素。