2009-04-16 11 views
46

Tengo un pequeño panel de control, solo una pequeña aplicación que hice. Me gustaría minimizar/poner el panel de control arriba/abajo con los sistemas, junto con la duración de la batería, fecha, redes, etc.¿Cómo coloco una aplicación Java en la bandeja del sistema?

¿Alguien que me pueda dar una pista, enlace a un tutorial o algo para leer?

Respuesta

64

A partir de Java 6, esto se admite en las clases SystemTray y TrayIcon. SystemTray tiene una muy extensa ejemplo, en sus Javadocs:

TrayIcon trayIcon = null; 
if (SystemTray.isSupported()) { 
    // get the SystemTray instance 
    SystemTray tray = SystemTray.getSystemTray(); 
    // load an image 
    Image image = Toolkit.getDefaultToolkit().getImage("your_image/path_here.gif"); 
    // create a action listener to listen for default action executed on the tray icon 
    ActionListener listener = new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      // execute default action of the application 
      // ... 
     } 
    }; 
    // create a popup menu 
    PopupMenu popup = new PopupMenu(); 
    // create menu item for the default action 
    MenuItem defaultItem = new MenuItem(...); 
    defaultItem.addActionListener(listener); 
    popup.add(defaultItem); 
    /// ... add other items 
    // construct a TrayIcon 
    trayIcon = new TrayIcon(image, "Tray Demo", popup); 
    // set the TrayIcon properties 
    trayIcon.addActionListener(listener); 
    // ... 
    // add the tray image 
    try { 
     tray.add(trayIcon); 
    } catch (AWTException e) { 
     System.err.println(e); 
    } 
    // ... 
} else { 
    // disable tray option in your application or 
    // perform other actions 
    ... 
} 
// ... 
// some time later 
// the application state has changed - update the image 
if (trayIcon != null) { 
    trayIcon.setImage(updatedImage); 
} 
// ... 

También podría retirar this article o this tech tip.

12

Es muy simple

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.JOptionPane; 

public class SystemTrayDemo{ 

//start of main method 
public static void main(String []args){ 
    //checking for support 
    if(!SystemTray.isSupported()){ 
     System.out.println("System tray is not supported !!! "); 
     return ; 
    } 
    //get the systemTray of the system 
    SystemTray systemTray = SystemTray.getSystemTray(); 

    //get default toolkit 
    //Toolkit toolkit = Toolkit.getDefaultToolkit(); 
    //get image 
    //Toolkit.getDefaultToolkit().getImage("src/resources/busylogo.jpg"); 
    Image image = Toolkit.getDefaultToolkit().getImage("src/images/1.gif"); 

    //popupmenu 
    PopupMenu trayPopupMenu = new PopupMenu(); 

    //1t menuitem for popupmenu 
    MenuItem action = new MenuItem("Action"); 
    action.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      JOptionPane.showMessageDialog(null, "Action Clicked");   
     } 
    });  
    trayPopupMenu.add(action); 

    //2nd menuitem of popupmenu 
    MenuItem close = new MenuItem("Close"); 
    close.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      System.exit(0);    
     } 
    }); 
    trayPopupMenu.add(close); 

    //setting tray icon 
    TrayIcon trayIcon = new TrayIcon(image, "SystemTray Demo", trayPopupMenu); 
    //adjust to default size as per system recommendation 
    trayIcon.setImageAutoSize(true); 

    try{ 
     systemTray.add(trayIcon); 
    }catch(AWTException awtException){ 
     awtException.printStackTrace(); 
    } 
    System.out.println("end of main"); 

}//end of main 

}//end of class 

conjunto apropiado ruta para una imagen y luego ejecutar el programa. t.y. :)

2

Este es el código que puede utilizar para acceder y personalizar la bandeja del sistema:

final TrayIcon trayIcon; 

if (SystemTray.isSupported()) { 

SystemTray tray = SystemTray.getSystemTray(); 
Image image = Toolkit.getDefaultToolkit().getImage("tray.gif"); 

MouseListener mouseListener = new MouseListener() { 

    public void mouseClicked(MouseEvent e) { 
     System.out.println("Tray Icon - Mouse clicked!");     
    } 

    public void mouseEntered(MouseEvent e) { 
     System.out.println("Tray Icon - Mouse entered!");     
    } 

    public void mouseExited(MouseEvent e) { 
     System.out.println("Tray Icon - Mouse exited!");     
    } 

    public void mousePressed(MouseEvent e) { 
     System.out.println("Tray Icon - Mouse pressed!");     
    } 

    public void mouseReleased(MouseEvent e) { 
     System.out.println("Tray Icon - Mouse released!");     
    } 
}; 

ActionListener exitListener = new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     System.out.println("Exiting..."); 
     System.exit(0); 
    } 
}; 

PopupMenu popup = new PopupMenu(); 
MenuItem defaultItem = new MenuItem("Exit"); 
defaultItem.addActionListener(exitListener); 
popup.add(defaultItem); 

trayIcon = new TrayIcon(image, "Tray Demo", popup); 

ActionListener actionListener = new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     trayIcon.displayMessage("Action Event", 
      "An Action Event Has Been Performed!", 
      TrayIcon.MessageType.INFO); 
    } 
}; 

trayIcon.setImageAutoSize(true); 
trayIcon.addActionListener(actionListener); 
trayIcon.addMouseListener(mouseListener); 

try { 
    tray.add(trayIcon); 
} catch (AWTException e) { 
    System.err.println("TrayIcon could not be added."); 
} 

} else { 

// System Tray is not supported 

} 
Cuestiones relacionadas