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

时间:2014-10-30 18:17:17

标签: java swt menuitem selected right-click

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

通过添加一个SelectionListener,我可以同时执行左键和右键,但是如何操作 我知道使用了哪一个吗?是否可以在MenuItem上使用MouseListener?

我想要做的是类似于浏览器收藏夹菜单,左键单击选择 然后右键单击最喜欢的上下文菜单。

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" );
 }
});

澄清: 对不起,没有设置屏幕截图,但我想如果你按照这个描述你可以看到我的意思。

  1. 在Windows资源管理器(或可能是任何其他浏览器)中选择“收藏夹”菜单
  2. 如果您左键单击其中一个收藏夹,浏览器将打开此URL, 但你也可以右击这个最爱。
  3. 右键单击将显示对所选收藏夹有效的上下文菜单。
  4. 我还需要为同一个MenuItem执行两个不同的操作(实际上与浏览器的目的相同)。

1 个答案:

答案 0 :(得分:4)

您可以左键单击SWT.Selection,右键单击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.MenuDetect监听器。只需拨打Button#setMenu(Menu)即可完成任务。