8

私は、作成時にシステムトレイにアイコンを追加する単純なJavaSwingアプリに取り組んでいます。私がやろうとしているのは、このアイコンがユーザーによってシングルクリックされたとき(左クリックまたは右クリック)を検出することです。ポップアップメニューはありません。アイコンがクリックされたときにアプリを復元したいだけです。

これは私が使用しているコードです:

    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を使用する必要がありますか?(MouseListenersが問題を引き起こす可能性があると聞きましたが、ActionListenersの方が優れています)

4

1 に答える 1

15

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

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

        }
    }
}); 

詳細については、マウスリスナーの作成方法を参照してください。

編集:ActionListener対MouseListener

低レベルのセマンティックイベントの概念があります。可能な限り、マウスイベントではなく、アクションイベントのリッスンなど、低レベルのイベントではなくセマンティックイベントをリッスンする必要があります。詳細については、低レベルイベントとセマンティックイベントを参照してください。

この場合、イベントからの詳細が必要なだけなので、MouseListenerを使用する必要があります。

于 2012-09-05T04:18:19.717 に答える