Search code examples
javasystem-tray

Hover over system Tray and open a balloon in Java


How do I hover over the system Tray and open a balloon in Java ? I 'am able to open a tool tip , but not able to open a balloon .

However, I can right click on the icon and do a actionPerformed and do this to open a balloon

trayIcon.displayMessage(title, message, TrayIcon.MessageType.INFO)


Solution

  • You can always emulate tooltip behavior yourself with a MouseListener and MouseMotionListener:

    String message = "Application running";
    
    int hoverTime = 1000;
    Timer messageTimer = new Timer(hoverTime,
        e -> trayIcon.displayMessage(null, message,
            TrayIcon.MessageType.INFO));
    messageTimer.setRepeats(false);
    
    trayIcon.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseEntered(MouseEvent event) {
            messageTimer.restart();
        }
    
        @Override
        public void mouseExited(MouseEvent event) {
            messageTimer.stop();
        }
    });
    trayIcon.addMouseMotionListener(new MouseMotionAdapter() {
        @Override
        public void mouseMoved(MouseEvent event) {
            messageTimer.restart();
        }
    });
    

    Note that Timer is a javax.swing.Timer, not a java.util.Timer, as the former guarantees its action will be executed in the AWT event dispatch thread.