SWT 右键菜单

2024-02-04 21:58
文章标签 右键 菜单 swt

本文主要是介绍SWT 右键菜单,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Top-level Menu

(1)在 ApplicationWorkbenchWindowAdvisor#preWindowOpen() 方法中启用菜单:
configurer.setShowMenuBar(true);
此方法调用并不一定显示菜单,只有当菜单中包含菜单项时,菜单才会显示。

(2)创建并添加菜单项
org.eclipsercp.hyperbola/ApplicationActionBarAdvisor

private IWorkbenchAction exitAction;
private IWorkbenchAction aboutAction;
private AddContactAction addContactAction;

protected void makeActions(IWorkbenchWindow window) {
    exitAction = ActionFactory.QUIT.create(window);
    register(exitAction);
    aboutAction = ActionFactory.ABOUT.create(window);
    register(aboutAction);
    addContactAction = new AddContactAction(window);
    register(addContactAction);
}

protected void fillMenuBar(IMenuManager menuBar) {
    MenuManager hyperbolaMenu = new MenuManager( "&Hyperbola", "hyperbola");
    hyperbolaMenu.add(addContactAction);
    hyperbolaMenu.add( new Separator());
    hyperbolaMenu.add(exitAction);
    MenuManager helpMenu = new MenuManager( "&Help", "help");
    helpMenu.add(aboutAction);
    menuBar.add(hyperbolaMenu);
    menuBar.add(helpMenu);
}


退出和关于菜单使用 org.eclipse.iu.actions.ActionFactory 中预设的 action。
通过 register 方法注册一个action,这样在 workbench window 退出后可以销毁这些资源。
MenuManager.add() 方法可将 action 添加到菜单项,或者将其他 MenuManager 添加到子菜单。

(3)创建自定义菜单项:Action

public class AddContactAction extends Action implements ISelectionListener,
        ActionFactory.IWorkbenchAction {
    private final IWorkbenchWindow window;
    public final static String ID = "org.eclipsercp.hyperbola.addContact";
    private IStructuredSelection selection;

    public AddContactAction(IWorkbenchWindow window) {
        this.window = window;
        setId(ID);
        setText( "&Add Contact...");
        setToolTipText( "Add a contact to your contacts list.");
        setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(
                "org.eclipsercp.hyperbola", IImageKeys.ADD_CONTACT));
        window.getSelectionService().addSelectionListener( this);
    }

    public void dispose() {
        window.getSelectionService().removeSelectionListener(this);
    }

    public void selectionChanged(IWorkbenchPart part, ISelection incoming) {
        // Selection containing elements
        if (incoming instanceof IStructuredSelection) {
            selection = (IStructuredSelection) incoming;
            setEnabled(selection.size() == 1
                    && selection.getFirstElement() instanceof ContactsGroup);
        } else {
            // Other selections, for example containing text or of other kinds.
            setEnabled( false);
        }
    }

    public void run() {
        AddContactDialog d = new AddContactDialog(window.getShell());
        int code = d.open();
        if (code == Window.OK) {
            Object item = selection.getFirstElement();
            ContactsGroup group = (ContactsGroup) item;
            ContactsEntry entry = new ContactsEntry(group, d.getUserId(), d
                    .getNickname(), d.getServer());
            group.addEntry(entry);
        }
    }
}


构造函数中注册了一个 ISelectionListener 到 window.getSelectionService() 中,这样当 window 发生 selection change 事件时,此 Action 就会收到相应的事件通知,并调用此类的 selectionChanged 方法。这个方法首先判断发生事件的是不是 IStructuredSelection 对象(用于区分 editor 中选择文字所触发此事件的情况),IStructuredSelection 接口的继承关系如下图:

window 本身并不产生 selection 事件,而 editors 和 views 可以作为 selection provider 注册到 window 上,将其产生的 selection 事件通知给 window.getSelectionService() 上的 ISelectionListener (本例是 实现了 ISelectionListener 接口的 AddContactAction)。ContactsView 在 createPartControl 方法中调用 getSite().setSelectionProvider(treeViewer) 方法将自己注册为selection provider 。

注意:此 Action 还实现了 ActionFactory.IWorkbenchAction 接口,并在 dispose 接口方法中从window.getSelectionService() 删除了 ISelectionListener 来释放资源,避免内存泄露

这篇关于SWT 右键菜单的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/678909

相关文章

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

Windows如何添加右键新建菜单

Windows如何添加右键新建菜单 文章目录 Windows如何添加右键新建菜单实验环境缘起以新建`.md`文件为例第一步第二步第三步 总结 实验环境 Windows7 缘起 因为我习惯用 Markdown 格式写文本,每次新建一个.txt后都要手动修改为.md,真的麻烦。如何在右键新建菜单中添加.md选项呢? 网上有很多方法,这些方法我都尝试了,要么太麻烦,要么不凑效

如何在Qt的widget上右键显示菜单

如何在Qt的widget上右键显示菜单 今天早上一来,我老大叫我在widget上点击右键加上一个菜单,并相应其响应的功能,因为我成刚接触Qt,所以看了下QtGUI编程这本书,做出来,记录下来,说不定哪天还用得上啊! 废话不多说,直接上代码: 方法一: m_text = QTextCodec::codecForLocale(); ui->tableWidget->addAction(ne

java AWT PopupMenu(右键菜单)

右键菜单使用PopupMenu对象表示,创建步骤如下: (1)创建PopupMenu的实例。 (2)创建多个MenuItem的多个实例,依次将这些实例加入到PopupMenu中。 (3)将PopupMenu加入到目标组件中。 (4)为需要出现上下文菜单的组件编写鼠标监听器,当用户释放鼠标右键时弹出右键菜单。 package javaAWT;import java.awt.BorderLa

java AWT菜单

菜单条,菜单和菜单项: MenuBar:菜单条,菜单的容器。 Menu:菜单组件,菜单项的容器。它也是MenuItem的子类,所以可作为菜单项使用。 PopupMenu:上下文菜单组件(右键菜单组件)。 MenuItem:菜单项组件。 CheckboxMenuItem:复选框菜单项组件。 MenuShortcut:菜单快捷组件。 Menu,MenuItem的构造器都可以接收一个字符串

JQuery.HoverDir库实现侧边栏二级菜单

Jquery.hoverDir响应鼠标移动方向的悬停效果插件 HTML代码 <div id="sidebar"><div class="mainNavs"><div class="menubox"><div class="menu_main"><h2>技术<span></span></h2><a href="#">Java</a><a href="#">PHP</a><a href="#"

右键菜单-新建里没有新建文本文档(windows 系统)

建议新建任意文件(如.doc),将后缀名改为.txt,然后将下面的内容贴入空白的TXT文件中: ----------------------------------------------------------------- Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.txt] @="txtfile" "PerceivedTy

(转)CMFCMenuBar删除默认菜单和创建新菜单

 这里要提一下的是VS Feature Pack的应用程序其中的菜单栏操作主要由CMFCMenuBar来负责。因此下面的编码也主要针对该类来进行。        首先我们实现编码实现删除默认的所有系统菜单项,其代码如下: [cpp]  view plain copy // 删除默认的所有系统菜单项   static void DelAllMenu(HMENU hM

MFC单文档去掉默认的菜单、工具栏和状态栏

 1,去掉工具栏和状态栏, 在  int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)   中注销掉相关的工具栏和状态栏语句,即可。 2,去掉菜单, 在 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 中,增加语句 cs.hMenu = NULL;//即 菜单句柄赋

一条指令,Windows11右键改回Windows10老版

win+R,输入cmd reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve 输入这条指令,直接回到老版,如果不好用,重启电脑 reg delete "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-