You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用MagicDraw OpenAPI在主菜单栏Help按钮右侧添加TEST按钮?

在MagicDraw主菜单栏Help按钮右侧添加TEST按钮的解决方案

我正在使用MagicDraw OpenAPI,想要在MagicDraw主菜单栏的Help按钮右侧(见下图红圈位置)添加一个名为“TEST”的新按钮。
期望效果

当前我写了一段代码,但运行后目标按钮并未显示:

public class Main extends Plugin{   
    public void init()
    {
        initialized = true;
        NMAction action = new MyAction("test", "TEST");
        MainMenuConfiguration configurator = new MainMenuConfiguration((MyAction) action);
        ActionsConfiguratorsManager.getInstance().addMainMenuConfigurator(configurator);
    } 
}
public class MainMenuConfiguration implements AMConfigurator {
    public void configure(ActionsManager actionsManager) {
        ActionsCategory newCategory = new ActionsCategory("idTest", "TEST");
        ActionsManager newManager = new ActionsManager();
        newManager.addCategory(newCategory);
    }
}

问题分析

原代码存在几个关键问题:

  1. 新建了独立的ActionsManager,没有关联到MagicDraw主菜单的实际管理器中
  2. 没有定位到Help菜单的位置,也没有将新的类别/Action插入到正确的位置
  3. 未实现AMConfigurator的getPriority()方法,可能导致配置在默认菜单加载前执行,无法找到Help类别

修正后的代码

1. 插件主类

public class Main extends Plugin {
    @Override
    public void init() {
        initialized = true;
        // 创建自定义TEST按钮的Action
        NMAction testAction = new MyAction("test", "TEST");
        // 注册主菜单配置器
        ActionsConfiguratorsManager.getInstance().addMainMenuConfigurator(new MainMenuConfiguration(testAction));
    }
}

2. 自定义Action类(实现点击逻辑)

import javax.swing.*;
import java.awt.event.ActionEvent;

public class MyAction extends NMAction {
    public MyAction(String id, String name) {
        super(id, name, null, null);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // 这里添加按钮点击后的业务逻辑,示例为弹窗提示
        JOptionPane.showMessageDialog(null, "TEST按钮已触发!");
    }
}

3. 菜单配置类(核心逻辑)

import com.nomagic.actions.AMConfigurator;
import com.nomagic.actions.ActionsCategory;
import com.nomagic.actions.ActionsManager;
import com.nomagic.actions.NMAction;
import java.util.List;

public class MainMenuConfiguration implements AMConfigurator {
    private final NMAction testAction;

    public MainMenuConfiguration(NMAction testAction) {
        this.testAction = testAction;
    }

    @Override
    public void configure(ActionsManager mainActionsManager) {
        // 获取主菜单中的Help类别
        ActionsCategory helpCategory = mainActionsManager.getCategoryById("Help");
        if (helpCategory == null) {
            return;
        }

        // 创建TEST类别并添加Action
        ActionsCategory testCategory = new ActionsCategory("idTest", "TEST");
        testCategory.addAction(testAction);

        // 找到Help类别的位置,将TEST类别插入到它的右侧
        List<ActionsCategory> categories = mainActionsManager.getCategories();
        int helpIndex = categories.indexOf(helpCategory);
        if (helpIndex != -1) {
            mainActionsManager.addCategory(helpIndex + 1, testCategory);
        }
    }

    @Override
    public int getPriority() {
        // 设置优先级,确保在默认菜单配置完成后执行
        return 100;
    }
}

关键注意事项

  • 优先级设置:必须实现getPriority()方法,返回一个比默认配置更高的数值(比如100),确保我们的配置在MagicDraw默认菜单加载完成后执行,才能正确找到Help类别
  • 关联主管理器:直接使用传入的mainActionsManager操作主菜单,不要新建独立的ActionsManager
  • 位置插入:通过indexOf找到Help类别的索引,插入到helpIndex + 1的位置,就能让TEST按钮出现在Help右侧
  • Action逻辑:自定义Action必须实现actionPerformed方法,否则按钮点击后无响应

内容的提问来源于stack exchange,提问作者xy3333

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 00:33:17