我一直在努力解决这个问题的时间比我想承认的要长一点。
我正在尝试以编程方式执行Action
当用户单击View
>Collapse All
按钮或在编辑器窗口中右键单击然后Code Folding
>时发生的相同操作Fold All
。
到目前为止我尝试过的发现:
- 与
String
对应的Action
可以在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
任何想法/替代方案?
EDIT1:在“这本书”中挖掘了一下之后,我想我比以前更接近了(但仍然不完全在那里)。引用书中的一段话:
Java GUI 组件通常使用 an
ActionMap
来存储Actions
由侦听器在鼠标、键盘、属性或容器事件上调用的可运行对象。与对象方法不同,Actions
MATLAB 不能直接调用。
然后解释了一种解决方法,大致涉及:获取某种Action
对象;创建一个ActionEvent
并调用Action
'sactionPerformed
作为ActionEvent
参数,如下实现:
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
附言
我知道有一个热键可以做到这一点(Ctrl
+ =
),但这不是我想要的(除非有一个命令来模拟热键按下:))。