2013-03-13 39 views
2

我正在开发一个使用SWT的OSX应用程序,并且我在系统托盘中有一个TrayIcon。我得到它的工作,但有这个小东西,真的让我感到困扰。当您右键单击该图标时,上下文菜单将按照我的意图显示。Selection and MenuDetection不同地从TrayIcon创建弹出式菜单(OSX)

(右键)

当我离开一下,但是,它只是使菜单弹出。

(左击)

我怎样才能让左键点击的行为是一个正确的?

两个代码是非常相同:

item.addListener (SWT.Selection, new Listener() { 
     public void handleEvent (Event event) { 
      menu.setVisible(true); 
     } 
    }); 

    item.addListener (SWT.MenuDetect, new Listener() { 
     public void handleEvent (Event event) { 
      menu.setVisible (true); 
     } 
    }); 

如果任何人希望看到整个项目的代码:

import org.eclipse.swt.SWT; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Event; 
import org.eclipse.swt.widgets.Listener; 
import org.eclipse.swt.widgets.Menu; 
import org.eclipse.swt.widgets.MenuItem; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.Tray; 
import org.eclipse.swt.widgets.TrayItem; 
import org.eclipse.wb.swt.SWTResourceManager; 

public class Icon { 


public static void main(String[] args) { 
Display display = new Display(); 
Shell shell = new Shell (display); 
shell.setVisible(false); 


final Tray tray = display.getSystemTray(); 
if (tray == null) { 
    System.out.println ("The system tray is not available"); 
} else { 
    final TrayItem item = new TrayItem (tray, SWT.NONE); 
    item.setToolTipText("Test Tool Tip"); 

    final Menu menu = new Menu (shell, SWT.POP_UP); 

    MenuItem mi = new MenuItem (menu, SWT.PUSH); 
    mi.setText ("View Messages"); 
    mi.addListener (SWT.Selection, new Listener() { 
     public void handleEvent (Event event) { 
      System.out.println("Messages will be displayed."); 
     } 
    }); 


    new MenuItem(menu, SWT.SEPARATOR); 

    MenuItem mi1 = new MenuItem (menu, SWT.PUSH); 
    mi1.setText ("Help"); 
    mi1.addListener (SWT.Selection, new Listener() { 
     public void handleEvent (Event event) { 
      System.out.println("Help will be displayed."); 
     } 
    }); 

    MenuItem mi2 = new MenuItem (menu, SWT.PUSH); 
    mi2.setText ("Version 1.0"); 

    item.addListener (SWT.DefaultSelection, new Listener() { 
     public void handleEvent (Event event) { 
      menu.setVisible (true); 
     } 
    }); 


    item.addListener (SWT.Selection, new Listener() { 
     public void handleEvent (Event event) { 
      menu.setVisible(true); 
     } 
    }); 

    item.addListener (SWT.MenuDetect, new Listener() { 
     public void handleEvent (Event event) { 
      menu.setVisible (true); 
     } 
    }); 
    item.setImage(SWTResourceManager.getImage(Icon.class, "/main/black.png")); 
} 

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

回答

2

如果只添加这(和删除SWT.DefaultSelection和SWT.Selection部分),这将工作得很好如预期

item.addListener (SWT.MenuDetect, new Listener() { 

           @Override 
           public void handleEvent(
             org.eclipse.swt.widgets.Event event) { 
            menu.setVisible (true); 



           } 
          });