2014-10-30 109 views
1

如何区分在swt中弹出菜单上单击鼠标右键?Java,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. 如果你对你的最爱之一左键单击浏览器会打开这个网址, 但在这你也可以用鼠标右键单击喜爱。
  3. 右键单击将弹出一个适用于所选收藏夹的上下文菜单。

我还需要两个不同的操作为同一个MenuItem(实际上是为了与浏览器相同的目的)。

+0

好的,但选择(左键单击)和上下文菜单(右键单击)已包含在我的答案中... – Baz 2014-10-31 15:25:08

+0

是在按钮上,但我无法在MenuItem上做到这一点。事实上,我怀疑操作系统只有菜单中的“选择”事件,并且据我所知,此事件不包含有关使用该按钮的信息。它可以在浏览器中成为一个只能看起来像菜单的小部件。当然,我也可以这样做,但如果可以使用菜单,它会节省很多工作。 – owan 2014-10-31 20:56:21

+0

好的,经过一些测试后,我很确定无法区分'MenuItem'上的左键和右键。 – Baz 2014-10-31 22:06:55

回答

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)即可完成工作。

+0

好的谢谢,但它的MenuItem newItem我想检测正确/左键单击。添加newItem.addListener(SWT.MenuDetect ...似乎没有工作 – owan 2014-10-31 07:23:29

+0

@owan那么菜单项上应该做什么右击? – Baz 2014-10-31 08:26:34

+0

它应该打开一个上下文菜单,您可以在其中删除或重命名菜单项。这与浏览器如何处理一个最喜欢的(至少是explorer或firefox)几乎是一样的。 – owan 2014-10-31 09:35:02

相关问题