2012-09-05 6 views
5

私はシステムトレイにアイコンを追加する簡単なJavaスイングアプリを開発中です。私がしようとしているのは、このアイコンがユーザによってクリックされたとき(左クリックか右クリックかにかかわらず)を検出することです。ポップアップメニューはありません。アイコンをクリックしたときにアプリケーションを復元します。System TrayIcon for Java Appへのシングルクリックを検出するにはどうすればよいですか?

これは私が使用しているコードです:私はこのプログラムを実行するときに発生

SystemTray tray = SystemTray.getSystemTray(); 
    Image icon = toolkit.getImage("icon.png"); 

    ActionListener listener = new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      System.out.println("click detected"); 
     } 
    }; 

    TrayIcon trayIcon = new TrayIcon(icon, "Test Program", null); 
    trayIcon.addActionListener(listener); 
    tray.add(trayIcon); 

何、それから、(左または右)シングルクリックは何の効果もありませんが、私はダブルクリックしたときにということですコンソールに「クリックが検出されました」というメッセージが表示されます。

シングルクリックを検出するにはどうすればよいですか?私はこのためにMouseListenerを使用する必要がありますか? (私はのMouseListenerの問題を引き起こす可能性があることを聞いた、とActionListenerには優れている)

+0

どのプラットフォームですか? Windows? Linux? – Femi

+0

@Femi Windows - –

+2

のみ30k up_votes ??? +1 – mKorbel

答えて

11

あなたはMouseListener、すなわちを使用することができます。

icon.addMouseListener(new MouseAdapter() { 
    public void mouseClicked(MouseEvent e) { 
     if (e.getClickCount() == 1) { 

     } 
    } 
}); 

詳細はHow to Write a Mouse Listenerを参照してください。

EDIT:のMouseListener対のActionListener

低レベルとセマンティックイベントの概念があります。可能であれば、マウスイベントではなく、アクションイベントをリッスンするなど、低レベルのイベントではなくセマンティックイベントを待機する必要があります。詳しくはLow-Level Events and Semantic Eventsをご覧ください。

イベントの詳細が必要な場合は、MouseListenerを使用する必要があります。

+0

MouseListenersとActionListenersに問題はありませんか? –

+0

@ClickUpvote最後の編集でActionListenerとMouseListenerの違いを明確にすることができるかどうかを確認してください。 – tenorsax

+0

は、「マウスダウン」通知(あなたが...そうかもしれない)に応答しない限り、e.getID()== MouseEvent.MOUSE_CLICKEDをチェックすることもできます。 – rogerdpack

関連する問題