关于GEF在Editor里响应SelectAll快捷键的问题

最近在学习GEF-whole-upload那本书,在模仿书上例子的过程中,想给里面的图形编辑器增加一些快捷键,比如Ctrl+A(全选图
形),Ctrl+S(保存)等等。

最初的想法是再Editor的setKeyHandler方法里面,使用KeyStroke类,注册Ctrl+A,Ctrl+S等键盘事件:
private void setKeyHandler() {
        KeyHandler keyHandler = new KeyHandler();
                ...
        keyHandler.put(KeyStroke.getPressed('a', 0x1, SWT.CTRL),

getActionRegistry().getAction(ActionFactory.SELECT_ALL.getId()));
        getGraphicalViewer().setKeyHandler(
                        new GraphicalViewerKeyHandler(getGraphicalViewer())
                                        .setParent(keyHandler));

 

}

但是经过试验,这种方法无法响应Ctrl+A事件。具体原因不清楚,上网查了很多资料得不到解答。后来和傻鸟大哥讨论了一下这个问题,他认为是有更高级
的注册机制存在,屏蔽了以这种形式注册的Ctrl+A事件的响应。

今天咖啡老大刚好有空,向他请教了这个问题,终于得到解决的方法。(老大果然厉害!万分感谢!)

具体的解决方法如下:

1. 修改ApplicationActionBarAdvisor.java:在makeActions方法里面添加:
selectAll = ActionFactory.SELECT_ALL.create(window);
register(selectAll);

2. 给Editor增加一个getAction的方法:
public IAction getAction(String key) {
        return getActionRegistry().getAction(key);

 

}

3. 再在DiagramActionBarContributor.java里面的setActiveEditor方法中添加:
actionBars.setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(),
action);
actionBars.updateActionBars();

注意:actionBars.setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(),
action) 的第二个参数action是需要通过Editor来获取的。因此,最后
DiagramActionBarContributor.java文件的修改为:

protected IAction getAction(IEditorPart editor, String actionID) {
        if (editor instanceof DiagramEditor) {
            return ((DiagramEditor) editor).getAction(actionID);
        }

        return null;

 

}

public void setActiveEditor(IEditorPart activeEditor) {
        IActionBars actionBars = this.getActionBars();
        actionBars.setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(),
getAction(activeEditor, ActionFactory.SELECT_ALL.getId()));
        actionBars.updateActionBars();

 

}

到此为止,图形编辑器可以响应Ctrl+A实现全选。

内容概要:本文研究了计及碳排放的多微网电能交互分布式运行策略,提出了一种基于交替方向乘子法(ADMM)的优化方法,旨在实现多微电网系统在满足能源供需平衡的同时降低碳排放。文中构建了包含分布式电源、储能系统、可控负荷及碳排放约束的多微网协同优化模型,通过ADMM算法将全局优化问题分解为各微网子系统独立求解的子问题,实现分布式协同调度,在保障各微网自治性的同时兼顾系统整体的经济性与低碳性。研究通过Matlab代码完成了算法仿真,验证了所提策略在提升能源利用效率、减少碳排放、增强系统鲁棒性与可扩展性方面的有效性,为低碳化、去中心化的能源互联网运行提供了理论支持与实践参考。; 适合人群:具备电力系统分析、优化理论及Matlab编程基础的科研人员、电气工程及相关专业的研究生,以及从事智慧能源、分布式能源系统规划与运行的工程技术人员。; 使用场景及目标:①应用于多微电网系统的分布式能量管理与协同优化调度;②支持“双碳”目标下的低碳电网运行策略设计与政策评估;③为ADMM等分布式优化算法在能源系统中的工程化应用提供完整的模型构建、算法实现与仿真验证案例。; 阅读建议:读者应结合Matlab代码深入理解ADMM算法的迭代流程、拉格朗日函数构造与收敛条件设定,重点关注模型中碳排放因子的引入方式、变量分解机制与子问题求解过程,建议通过调整微网数量、碳价参数及通信拓扑结构进行多场景仿真,以深化对分布式协同机制与环保经济权衡关系的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值