MATLAB 代码
function setLogo(fig, iconPath)
% 更改 UI 界面的 Logo :
% setLogo(fig, iconPath)
% fig 为窗口句柄
% iconPath 为图标存放的路径,类型为 '*.png', '*.jpg', ‘.ico’等
% 参数合法性判断
if ~isvalid(fig), return; end
if ~exist(iconPath, "file"), return; end
% 暂时关闭警告
stuWarn = warning;
warning('off');
% 设置
frame = get(fig, "JavaFrame");
if ~isempty(frame)
% JFrame 绘制
set(frame,'FigureIcon',javax.swing.ImageIcon(iconPath));
else
% Chromium 绘制
% 最长等待加载时间 3s
limit = 3;
rez = char();
while ~isequal(rez, iconPath) && limit>0
try
% 获取webwindow句柄
win = struct(struct(struct(fig).Controller).PlatformHost).CEF;
win.Icon=iconPath;
rez = win.Icon;
catch
% 给图形(网页)更多时间加载
limit = limit - 1;
pause(1);
end
end
end
% 恢复设置
warning(stuWarn);
end
注释
如下图所示,通过MATLAB制作的界面中,通常默认包含MATLAB的图标:
很多时候不可避免地要修改左上角的 Logo 图标。
一般绘制图像常用的是figure
,而在MATLAB的 App Designer 中,默认使用的是uifigure
。虽然通过class()
函数返回两者的类名称都是matlab.ui.Figure
,但这两类UI在MATLAB中有着完全不同的实现方式:
figure
通过 Java 语言实现,基于Java Swing中的JFrame类进行绘制,因此可以使用get()
方法获取figure
的JavaFrame相关句柄;uifigure
通过 JavaScript 语言实现,基于DOJO和内嵌Chromium,所以可以使用CEF接口进行操作。
遇到的问题
uifigure 需要使用的*.ico
格式图像,在figure中却无法打开。正如下图所示,修改后 figure 中没了默认图标,但正确图标也没有显示出来。后来更换 figure 界面的logo为*.png
格式才正常显示。
参考链接
MATLAB App Designer教程连载6: App Designer的局限性
matlab如何修改GUI的图标 左上角的logo
Matlab App Designer 中如何将左上角matlab图标更改为自己的logo?