JCEF 如何修改右键菜单项(JCEF在右键菜单中添加开发者选项-show dev tools)

需求:

在界面的右键事件中添加一个打开开发者选项的菜单(Show Dev Tools)

所以我们可以看到的是在界面上右键,会有默认的一些菜单项(前进,后退,打印,查看源码),而这些功能并不一定是我们需要的,所以我们首先要做的就是去除这些选项,参考:java cef3 如何禁止右键菜单项

同理,我们只需要在CefContextMenuHandler接口的实现类中去定制我们的菜单项即可,代码如下:

public class ContextMenuHandler implements CefContextMenuHandler {

    private final Frame owner;

    public ContextMenuHandler(Frame owner) {
        this.owner = owner;
    }

    @Override
    public void onBeforeContextMenu(CefBrowser browser, CefContextMenuParams params, CefMenuModel model) {
        model.clear();//清除默认的菜单项
        model.addItem(MenuId.MENU_ID_SHOW_DEV_TOOLS, "开发者选项");
    }

    @Override
    public boolean onContextMenuCommand(CefBrowser browser, CefContextMenuParams params, int commandId,
            int eventFlags) {
        switch (commandId) {
            case MenuId.MENU_ID_SHOW_DEV_TOOLS: {
                // 打开开发者选项
                DevToolsDialog devToolsDlg = new DevToolsDialog(owner, "开发者选项", browser);
                devToolsDlg.setVisible(true);
                return true;
            }
            default: {
                return false;
            }
        }
    }

    @Override
    public void onContextMenuDismissed(CefBrowser browser) {

    }

}

在onBeforeContextMenu中先清除默认的菜单项,然后绑定开发者选项,这里需要注意的是,MenuId.MENU_ID_SHOW_DEV_TOOLS这个在MenuId中是不存在的,需要我们手动添加进去

接着我们在onContextMenuCommand方法中绑定菜单事件,然后重启服务器,在界面上右键即可看到开发者选项,点击打开开发者选项对话框

附DevToolsDialog的实现:

public class DevToolsDialog extends JDialog {

    private static final long serialVersionUID = 6859581641415822180L;

    private final CefBrowser devTools_;

    public DevToolsDialog(Frame owner, String title, CefBrowser browser) {
        this(owner, title, browser, null);
    }

    public DevToolsDialog(Frame owner, String title, CefBrowser browser, Point inspectAt) {
        super(owner, title, false);

        setLayout(new BorderLayout());
        setSize(800, 600);
        setLocation(owner.getLocation().x + 20, owner.getLocation().y + 20);

        devTools_ = browser.getDevTools(inspectAt);
        add(devTools_.getUIComponent());

        addComponentListener(new ComponentAdapter() {
            @Override
            public void componentHidden(ComponentEvent e) {
                dispose();
            }
        });
    }

    @Override
    public void dispose() {
        devTools_.close();
        super.dispose();
    }
}
View Code
原文地址:https://www.cnblogs.com/minteliu/p/5729088.html