本文部分内容翻译于:Undocumented Matlab
Matlab AppDesigner是R2016a之后推出的新界面设计工具,较GUIDE的GUI 界面更美化,组建更丰富,具有自动化编程等特性。
但是表面上看AppDesigner并没有暴露很多组件诸如Javaframe
GUIDE的figure(gcf)是基于Java的Jframe组件,而Appdesigner的app.UIFigure是基于html的webview,本质上运行了一个CEF(Chromium嵌入式框架 Chromium Embedded Framework version 3.2272 on Chromium 41 in R2016a)。使用的JS DOJO 套件,可以想象Matlab与js/webapp接轨的趋势了。。
因此,如果像GUIDE一样或者其他教学一样视图获取
get(app.UIFigure,'javaframe')
会得到一个空数组,而且是特意留下的,Matlab一直有抛弃javaframe的想法,还发布过调查,现在看来还是不敢完全抛弃。
不说更多,下面就揭示一些其他组件结构吧。
>> hFig = uifigure('Name','Yair', ...); % 如果是app designer初始化函数中,就是hFig = app.UIFigure,要先输入drawnow;!!!
>> warning off MATLAB:structOnObject % 关闭struct调用警告
>> figProps = struct(hFig); % 利用struct暴露其属性
>> controller = figProps.Controller; % Controller 是 UIFigure 隐藏的属性
>> controllerProps = struct(controller);
>> container = controllerProps.Container % Container 又是 Controller 隐藏的属性。。
container =
FigurePeerNode: [1x1 com.mathworks.peermodel.impl.PeerNodeImpl]
Resizable: 1
Position: [86 39 584 465]
Tag: ''
Title: 'Yair' %改标题
Icon: 'C:\Program Files\Matlab\R2016a\toolbox\matlab\uitools\uicomponents\resources\images…' %这个可以改图标
Visible: 1
URL: 'http://localhost:31417/toolbox/matlab/uitools/uifigureappjs/componentContainer.html…'
HTML: 'toolbox/matlab/uitools/uifigureappjs/componentContainer.html'
ConnectorPort: 31417
DebugPort: 0
IsWindowValid: 1
>> win = container.CEF % CEF 是 Container 隐藏的属性
win =
URL: 'http://localhost:31417/toolbox/matlab/uitools/uifigureappjs/component…'
Title: 'Yair'
Icon: 'C:\Program Files\Matlab\R2016a\toolbox\matlab\uitools\uicomponents\re…'
Position: [86 39 584 465]
CustomWindowClosingCallback: @(o,e)this.Model.hgclose()
CustomWindowResizingCallback: @(event,data)resizeRequest(this,event,data)
WindowResizing: []
WindowResized: []
FocusGained: []
FocusLost: []
DownloadCallback: []
PageLoadFinishedCallback: []
MATLABClosingCallback: []
MATLABWindowExitedCallback: []
PopUpWindowCallback: []
RemoteDebuggingPort: 0
CEFVersion: '3.2272.2072'
ChromiumVersion: '41.0.2272.76'
isWindowValid: 1
isDownloadingFile: 0
isModal: 0
isWindowActive: 1
isAlwaysOnTop: 0 %保持顶端
isAllActive: 1
isResizable: 1 %可否缩放
MaxSize: []
MinSize: []
利用win.executeJS(jsStr, timeout)方法,可以用js做很多黑科技,详情见