2014-10-30 101 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

相關問題