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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM