Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,swt,如何区分右击和左击弹出菜单_Java_Swt_Menuitem_Selected_Right Click - Fatal编程技术网

Java,swt,如何区分右击和左击弹出菜单

Java,swt,如何区分右击和左击弹出菜单,java,swt,menuitem,selected,right-click,Java,Swt,Menuitem,Selected,Right Click,如何在swt中区分右键单击和左键单击弹出菜单 通过添加SelectionListener,我可以对左键和右键单击进行操作,但是如何操作呢 我知道用了哪一个吗?有可能在菜单项上安装鼠标侦听器吗 我想做的是类似于浏览器收藏夹菜单,左键单击选择 然后右键单击以查看收藏夹关联菜单 Button bn = new Button(shell, SWT.FLAT); bn.setText("Right Click to see the popup menu"); Menu popupMenu = new M

如何在swt中区分右键单击和左键单击弹出菜单

通过添加SelectionListener,我可以对左键和右键单击进行操作,但是如何操作呢 我知道用了哪一个吗?有可能在菜单项上安装鼠标侦听器吗

我想做的是类似于浏览器收藏夹菜单,左键单击选择 然后右键单击以查看收藏夹关联菜单

Button bn = new Button(shell, SWT.FLAT);
bn.setText("Right Click to see the popup menu");

Menu popupMenu = new Menu(bn);
MenuItem newItem = new MenuItem(popupMenu, SWT.CASCADE);
newItem.setText("New");

newItem.addSelectionListener(new SelectionListener() {
 public void widgetSelected(SelectionEvent e) {    
      System.out.print("SELECTED1\n" );
 }
 public void widgetDefaultSelected(SelectionEvent e) {
      System.out.print("SELECTED2\n" );
 }
});
澄清: 很抱歉,没有包括屏幕截图,但我想如果您遵循此描述,您可以看到我的意思

在Windows资源管理器或任何其他浏览器中选择“收藏夹”菜单 如果左键单击其中一个收藏夹,浏览器将打开此URL, 但您也可以右键单击此收藏夹。 右键单击将显示对所选收藏夹有效的上下文菜单。 我还需要对同一菜单项执行两种不同的操作,实际上,这与浏览器的用途相同。

您可以监听SWT。选择左键单击和选择SWT.MenuDetect右键单击:

public static void main(String[] args)
{
    Display display = new Display();
    Shell shell = new Shell();
    shell.setText("StackOverflow");
    shell.setLayout(new FillLayout());

    Button bn = new Button(shell, SWT.FLAT);
    bn.setText("Right Click to see the popup menu");

    Menu popupMenu = new Menu(bn);
    MenuItem newItem = new MenuItem(popupMenu, SWT.CASCADE);
    newItem.setText("New");

    bn.addListener(SWT.Selection, new Listener()
    {
        @Override
        public void handleEvent(Event e)
        {
            System.out.println("click");
        }
    });
    bn.addListener(SWT.MenuDetect, new Listener()
    {
        @Override
        public void handleEvent(Event e)
        {
            System.out.println("menu");
        }
    });
    bn.setMenu(popupMenu);

    shell.pack();
    shell.open();

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
        {
            display.sleep();
        }
    }
    display.dispose();
}

也就是说,对于菜单,您不需要SWT.menudetec侦听器。只需调用ButtonsetMenuMenu就可以了。

好的,谢谢,但这是MenuItem newItem,我想检测右/左键单击。正在添加newItem.addListenerSWT.MenuDetect。。。似乎不起作用。@owan那么右键单击菜单项应该做什么?它应该打开一个上下文菜单,您可以在其中删除或重命名菜单项。这几乎与浏览器处理收藏夹(至少是explorer或firefox)的方式相同。@owan,那么您想从上下文菜单打开上下文菜单吗?实际上它不是从上下文菜单打开的。弹出菜单将从左键单击启动,但弹出菜单的启动方式会有任何不同吗?好的,但选择左键单击和上下文菜单右键单击已包含在我的答案中…按钮上有,但我没有在菜单项上做到这一点。事实上,我怀疑操作系统只为菜单选择了事件,就我所知,这个事件并不包含使用哪个按钮的信息。在浏览器中,它很可能是一个看起来像菜单的小部件。当然,我也可以这样做,但如果可以使用菜单,这将节省大量工作。好的,经过一些测试后,我非常确定无法区分菜单项上的左键和右键。我担心是这样,但感谢您的尝试。