【问题标题】:Is there a way to change the title of the MATLAB Command Window?有没有办法更改 MATLAB 命令行窗口的标题?
【发布时间】:2009-12-17 20:15:08
【问题描述】:

我正在使用 C++ API 来启动 MATLAB(通过 engOpenSingleUse)。一切正常。但我想将窗口的标题从“MATLAB 命令行窗口”更改为其他名称。

我经常打开 4 或 5 个,如果我的程序崩溃,偶尔会有一个成为孤立的。如果我可以更改标题,我会更好地知道哪个是哪个。

是否有我可以执行的 MATLAB 命令(通过 engEvalString)来执行此操作?

【问题讨论】:

    标签: windows matlab matlab-engine


    【解决方案1】:

    对于 Matlab 7:

    jDesktop = com.mathworks.mde.desk.MLDesktop.getInstance;
    jDesktop.getMainFrame.setTitle('my new title');
    

    *或专门用于命令行窗口:

    cmdWin = jDesktop.getClient('Command Window');
    cmdWin.getTopLevelAncestor.setTitle('my new title');
    

    对于 Matlab 6:

    jDesktop = com.mathworks.ide.desktop.MLDesktop.getMLDesktop;
    jDesktop.getMainFrame.setTitle('my new title');
    

    *或命令行窗口:

    cmdWin = jDesktop.getClient('Command Window');
    cmdWin.getTopLevelWindow.setTitle('my new title');
    


    此处描述了其他相关未记录的桌面功能:
    http://UndocumentedMatlab.com/blog/tag/desktop/

    【讨论】:

    • 该死。这适用于我自己开始的 MATLAB。 (前两行,使用 getMainFrame)。它在以 engOpen () 启动的 MATLAB 命令行窗口中不起作用。我可以在那里输入命令,这是错误: » jDesktop = com.mathworks.mde.desk.MLDesktop.getInstance; » cmdWin = jDesktop.getClient('MATLAB 命令行窗口'); » cmdWin.getTopLevelAncestor.setTitle('我的新标题'); ???尝试引用非结构数组的字段。
    • Eric - 问题可能是因为代码正确获取了 jDesktop 句柄,但返回了一个空的 cmdWin 句柄。这可能是因为您在尝试获取 cmdWin 引用句柄时没有打开名为“MATLAB 命令行窗口”的窗口。尝试运行 jDesktop.getClientTitles(或类似的变体 - 请参阅 methods(jDesktop) 以获取支持的方法的完整列表)以获取桌面窗口客户端的实际名称。
    • 嗯.....这是我看到的...... getClientTitles 返回 9 个条目,“命令窗口”、“命令历史记录”等。但我只看到一个窗口windows 桌面,它被称为“MATLAB 命令行窗口”。当我使用字符串(“MATLAB 命令行窗口”或“命令行窗口”)调用 jDesktop.getClient 时,它只返回空集 []。我没有运行常规的 MATLAB 实例,这是我从 engOpen() 获得的实例。感谢您的帮助,我真的很感激!
    • Eric - 也许您在调用 engOpen() 后过早地尝试检索客户端句柄? - 当您调用 getClient() 时,命令行窗口客户端可能仍未准备好。也许尝试插入一个短暂的延迟 pause()?
    • 是的 - 不,一旦命令窗口打开,我可以使用 endEvalString() 函数,或者我可以自己直接在 Commadn 窗口中输入命令。两者都不起作用,所以这不是时间问题。我的猜测是,就 java UI 类而言,命令行窗口与常规的“完整”MATLAB 有所不同。叹息。
    【解决方案2】:

    尝试直接针对 Java AWT 类进行编码。这可能更灵活,可以在 C++ 下运行的 Matlab 引擎中工作。 (没有在这种情况下测试它,因为我不使用引擎。)

    function change_win_title(oldName, newName)
    
    wins = java.awt.Window.getOwnerlessWindows();
    for i = 1:numel(wins)
        if isequal(char(wins(i).getTitle()), oldName)
            wins(i).setTitle(newName);
        end
    end
    

    你会这样使用它。

    change_win_title('MATLAB Command Window', 'My new window name')
    

    您可以使用其他测试(窗口类等)来识别感兴趣的窗口。

    【讨论】:

    • 在常规 GUI 中工作,在引擎命令窗口中不起作用
    猜你喜欢
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 2013-11-18
    • 2017-08-20
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多