我已经在这个问题上挣扎了比我想承认的时间更长。
我正在尝试以编程方式执行用户单击“查看”>“折叠全部”按钮或右键单击编辑器窗口然后选择“代码折叠”>“折叠全部”时发生的相同Action
。
我尝试和发现的内容:
Action
对应的String
可以在enum
com.mathworks.mde.editor.ActionID
中找到,为:'collapse-all-folds'
。- 当
Action
激活时,似乎会执行以下方法:org.netbeans.api.editor.fold.FoldUtilities.collapseAll(...)
(因此有netbeans标签)。 - 此代码允许我获取
EditorAction
、ActionManager
、MatlabEditor
的实例:
jEd = com.mathworks.mlservices.MLEditorServices.getEditorApplication.getActiveEditor;
jAm = com.mathworks.mde.editor.ActionManager(jEd);
jAc = com.mathworks.mde.editor.EditorAction('collapse-all-folds');
我的问题是我找不到一种方法来实际激活“Action”。
有什么想法/替代方案吗?
编辑1:在"这本书"中深入研究后,我认为我比以前更接近了(但还不够)。引用自该书的内容如下:
然后解释了一种解决方法,大致涉及获取某种类型的Java GUI组件通常使用
ActionMap
存储可运行的Actions
,这些Actions
由鼠标、键盘、属性或容器事件上的监听器调用。与对象方法不同,Actions
不能直接由MATLAB调用。
Action
对象;创建一个ActionEvent
并使用ActionEvent
作为参数调用Action
的actionPerformed
,如下所示:import java.awt.event.*;
jEd = com.mathworks.mlservices.MLEditorServices.getEditorApplication.getActiveEditor;
jAm = com.mathworks.mde.editor.ActionManager(jEd);
jAc = jAm.getAction(com.mathworks.mde.editor.EditorAction('collapse-all-folds'));
jAe = ActionEvent(jAm, ActionEvent.ACTION_PERFORMED, '');
jAc.actionPerformed(jAe);
这段代码运行没有出错,但是好像什么也没做。我怀疑我在错误的对象上调用了 "ActionEvent" 和 "actionPerformed"("ActionManager" 可能与这个问题没有任何关系)。
P.S.
我知道有一个热键可以做到这一点(Ctrl
+ =
),但这不是我要找的方法(除非有一个命令来模拟按下热键:)。