2012-09-05 2 views
5

Я работаю над простым приложением Java swing, которое добавляет значок в системный трей при его создании. То, что я пытаюсь сделать, - это обнаружить, когда пользователь нажимает этот значок одним щелчком мыши или щелчком правой кнопки мыши. Во всплывающем меню нет всплывающего меню, я просто хочу, чтобы приложение было восстановлено при щелчке по значку.Как обнаружить одиночные клики в System TrayIcon для Java-приложения?

Это код, я использую:

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 лучше)

+0

Какая платформа? Окна? 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: ActionListener против MouseListener

Существует понятие низкого уровня и семантические события. По возможности вы должны слушать семантические события, а не события низкого уровня, такие как прослушивание событий действий, а не событий мыши. Читайте для получения дополнительной информации в Low-Level Events and Semantic Events.

В этом случае вам просто нужно получить больше информации из мероприятия, поэтому требуется использовать MouseListener.

+0

Не существует ли проблем с MouseListeners и ActionListeners? –

+0

@ClickUpvote посмотреть, может ли мое последнее редактирование прояснить разницу между ActionListener и MouseListener. – tenorsax

+0

может также хотеть проверить, если e.getID() == MouseEvent.MOUSE_CLICKED, если вы не хотите отвечать только на уведомление «мыши вниз» (которое вы можете ...) – rogerdpack

Смежные вопросы