正如您所注意到的,较新版本的Matlab不会为编辑器返回相同类型的Java对象.
仍然可以使用与以前相同的命令访问主编辑器服务:
edtSvc = com.mathworks.mlservices.MLEditorServices ; %// get the main editor service ;
但这只返回服务的句柄,而不是单个编辑器.
正如丹尼尔所回答的,你可以从那里关闭全部服务,这将立即关闭所有编辑.您可以使用以下两种方法之一:
edtSvc.getEditorApplication.close ; %// Close all editor windows. Prompt to save if necessary.
edtSvc.getEditorApplication.closeNoPrompt ; %// Close all editor windows, WITHOUT SAVE!!
现在在这个版本中,每个打开的文件实际上是一个编辑器对象的实例.如果要控制单个编辑器选项卡/窗口,可以检索编辑器对象的列表,然后单独应用它们的方法:
edtList = edtSvc.getEditorApplication.getOpenEditors.toArray ; %// get a list of all the opened editor
edtList =
java.lang.Object[]:
[com.mathworks.mde.editor.MatlabEditor]
[com.mathworks.mde.editor.MatlabEditor]
[com.mathworks.mde.editor.MatlabEditor]
这将返回com.mathworks.mde.editor.MatlabEditor对象的向量. (本例中我的编辑器中有3个打开的文件).
从现在开始,这些对象中的每一个都控制一个单独的文件.您可以关闭单个文件,但需要知道要定位的文件是哪个索引.要知道哪一个指向什么,您可以查询getLongName属性:
>> edtList(1).getLongName
ans =
C:\TEMP\StackExchange\Editor_control.m
但是,如果您必须控制单个文件,我发现构建一个具有与文件名对应的字段名称的结构更容易.这可以这样做:
for k=1:length(edtList) ;
[~, fname ]= fileparts( char( edtList(k).getLongName.toString ) ) ;
edt.( fname ) = edtList(k) ;
end
现在我有一个有意义名称的结构(好吧,至少对我来说,你的文件和字段名称当然会有所不同):
>> edt
edt =
Bending_Movie_Time_Lapse: [1x1 com.mathworks.mde.editor.MatlabEditor]
Editor_control: [1x1 com.mathworks.mde.editor.MatlabEditor]
foldfunction_test: [1x1 com.mathworks.mde.editor.MatlabEditor]
所以回到关闭一个单独的文件.这可以使用与之前相同的方法之一轻松完成:
edt.foldfunction_test.close %// close with prompt if necessary
edt.foldfunction_test.closeNoPrompt %// close immediately without save
请注意,在此阶段,您还可以访问编辑器文件的一个很好的方法和属性列表.您可以使用Matlab的自动完成(Tab键)来查看它们.
在Matlab R2013a / Windows 7 64位上完成的示例