2012-09-05 8 views
5

Pracuję nad prostą aplikacją Java, która dodaje ikonę do paska zadań po utworzeniu. Co próbuję zrobić, to wykryć, kiedy ta ikona jest jednym kliknięciem przez użytkownika (klikając lewym przyciskiem myszy lub prawym przyciskiem myszy), Nie ma menu podręcznego, po prostu chcę, aby aplikacja została przywrócona po kliknięciu ikony.Jak wykrywać pojedyncze kliknięcia w System TrayIcon dla aplikacji Java?

Jest to kod używam:

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); 

Co się dzieje, kiedy uruchomić ten program jest jednak to, że pojedyncze kliknięcie (lewy lub prawy) nie mają żadnego wpływu, ale kiedy, a następnie kliknij dwukrotnie pokazuje komunikat "kliknij wykryto" w konsoli.

Co mogę zrobić, aby wykryć pojedyncze kliknięcia? Czy do tego potrzebuję używać MouseListener? (Słyszałem, że MouseListeners może powodować problemy, a ActionListeners są lepsze)

+0

Jaka platforma? Windows? Linux? – Femi

+0

@Femi Windows - –

+2

tylko 30k up_votes ???, +1 – mKorbel

Odpowiedz

11

Można użyć MouseListener, tj:

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

     } 
    } 
}); 

Zobacz How to Write a Mouse Listener więcej szczegółów.

EDIT: ActionListener vs MouseListener

Jest koncepcja niskim poziomie i zdarzeń semantycznych. Gdy tylko jest to możliwe, należy raczej słuchać zdarzeń semantycznych niż zdarzeń niskiego poziomu, takich jak słuchanie zdarzeń akcji, a nie zdarzeń myszy. Przeczytaj więcej szczegółów w Low-Level Events and Semantic Events.

W tym przypadku potrzebujesz więcej szczegółów z wydarzenia, więc użycie MouseListener jest wymagane.

+0

Czy nie występują problemy z korzystaniem z MouseListeners i ActionListeners? –

+0

@ClickUpvote Sprawdź, czy moja ostatnia edycja może wyjaśnić różnicę między ActionListener i MouseListener. – tenorsax

+0

może również chcieć sprawdzić, czy e.getID() == MouseEvent.MOUSE_CLICKED, chyba że chcesz odpowiedzieć tylko na powiadomienie "w dół" (które możesz ...) – rogerdpack

Powiązane problemy