Antes vimos como Minimizar una aplicación .NET a la Tray Bar. En esta ocasión, minimizaremos a la barra tray una aplicación Java.

Basado en el artículo de SDN, este es el resuemn de los pasos a seguir:
- Declarar los atributos de clase que referenciarán a los objetos de la barra tray, ícono de la barra tray, menú contextual y elementos del menú contextual.
private javax.swing.JMenuItem menuItemSalir;
private javax.swing.JPopupMenu popupContextual;
private javax.swing.JSeparator separator;
private SystemTray tray;
private final TrayIcon trayIcon;
- Crear un menu contextual (aquel que se desplegará al hacer clic sobre el ícono de la barra tray). Si lo haces con NetBeans, el código se generará automáticamente.
menuItemRestore = new javax.swing.JMenuItem();
separator = new javax.swing.JSeparator();
menuItemSalir = new javax.swing.JMenuItem();
menuItemRestore.setText("Restaurar");
menuItemRestore.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
menuItemRestoreActionPerformed(evt);
}
});
popupContextual.add(menuItemRestore);
popupContextual.add(separator);
menuItemSalir.setText("Salir");
menuItemSalir.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
menuItemSalirActionPerformed(evt);
}
});
popupContextual.add(menuItemSalir);
- Agregar los handlers para los actionPerformed de los elementos del Menu Contextual:
this.setVisible(true);
this.toFront();
tray.remove(trayIcon);
}
private void menuItemSalirActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
- Agregar el handler para el evento windowStateChanged del JFrame base:
if ( evt.getNewState() == ICONIFIED) {
this.setState(NORMAL);
this.setVisible(false);
if (SystemTray.isSupported()) {
tray = SystemTray.getSystemTray();
MouseListener mouseListener = new MouseListener( ) {
public void mouseClicked(MouseEvent e) {
if ( e.getButton()==e.BUTTON1 ) {
trayIcon.displayMessage("AppTray", "Haz hecho clic sobre mi!",TrayIcon.MessageType.INFO);
}
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
popupContextual.setLocation(e.getX(), e.getY());
popupContextual.setInvoker(popupContextual);
popupContextual.setVisible(true);
}
}
};
trayIcon.setImageAutoSize(true);
trayIcon.addMouseListener(mouseListener);
trayIcon.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
menuItemRestoreActionPerformed(e);
}
}
);
try {
tray.add(trayIcon);
} catch (AWTException e) {
System.err.println("No se pudo agregar el ícono a la barra tray");
this.setVisible(true);
}
} else {
// System Tray is not supported
}
}
}
Descargar el proyecto de ejemplo AppTray (desarrollado en NetBeans 6.0)


Lek
mayo 19, 2008
Veo que es para Java 6. Para versiones anteriores tienes, o bien el SysTray for Java, o bien a través de SWT. Si te interesan los ejemplos, te los puedo conseguir
Luciano
mayo 19, 2008
Así es, es para Java 6
. Gracias por el comentario.
oscar cordero
octubre 14, 2008
que ventaja tiene hacerlo con 1.6? y no con java 1.4?
gracias.
Iuga
febrero 27, 2009
Uhh pero que buen ejemplo, ya mismo intento ponerlo en práctica y te aviso como me fue…
Ivan
mayo 24, 2009
buenas…justo lo estaba buscando. Tengo un problema intente usarlo y anda bien pero cuando pongo otra imagen distinta a la que usaste en el ejemplo no puedo ver la imagen en la barra de tarea. Probe con varias…y nada. Como puedo solucionar el problema??
Gracias
Omar
agosto 10, 2009
Oye amigo, te faltó explicar que hay que agregar un windowstatechanged a la ventana…muy buena aportacion. Gracias sigue así (bueno esta entrada es vieja, pero espero que sigas así jejeje).
Omar
agosto 10, 2009
No sirve del todo bien, lo compilé y lo ejecuté y cuando minimizas no desaparece la ventana (se queda visible) y además cuando le das click al icono del traybar solo aparece el dialogo de “Haz click derecho” pero sin el menú.
Me podrías ayudar, es tu código el proyecto AppTray (sin cambios, es que quería ver porque a mi no me funcionaba, descargué tu código y se comporta igual)
Omar
agosto 15, 2009
ya lo hice bien! =)…pero sin tu ayuda no hubiera podido, si quieres date una vuelta a mi blog para que veas como es la solucion completa (al menos en gnu/linux).
yeison soto
febrero 3, 2010
Hola amigo, se puede poner una imagen gif animada que se mueva cuando este minimizada como por ejemplo el del antivirus.
Diego
abril 19, 2010
Muy bueno, justo lo estaba buscando…. Gracias
henry
enero 28, 2011
tengo un problema al hacerlo en mi programa, me dice que debo inicializar la variable trayIcon y si la pongo como null no me aparece el error pero al momento de ejecutarlo y minimizrlo aparece un error y no lo veo en la barra de tareas, tu programa si funciona correctamente