Matlab App Designer UIFigure中利用dojo/js/Container/缩放/改图标等技巧

20
Sep

Matlab App Designer UIFigure中利用dojo/js/Container/缩放/改图标等技巧

本文部分内容翻译于: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做很多黑科技,详情见

添加新评论