sábado, 31 de julio de 2010

La nueva clase SystemTray de Java SE 6

La nueva clase SystemTray permite (si es soportado por el sistema operativo) crear un pequeño ícono en la bandeja de escritorio, de tal manera que pueda accederse a ella sin necesidad de crear una ventana común. Sólo un pequeño ícono que para windows por ejemplo se encuentra cerca del reloj, donde generalmente corren las aplicaciones como Antivirus, reloj, etc...

De hecho creo que este es el artículo mas corto que escrito, debido a lo fácil que se me hizo realizarlo veamos el ejemplo:



package traydemo;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DemoTray {
public static void main(String[] args) {
final TrayIcon icono;
Image imagen = null;
final JFrame ventana = new JFrame("Principal");
if(SystemTray.isSupported()){
SystemTray tray = SystemTray.getSystemTray();
imagen = Toolkit.getDefaultToolkit().
getImage("Tray.jpg");
PopupMenu popup = new PopupMenu();
MenuItem optComenzar = new MenuItem("Comenzar...");
MenuItem optSalir = new MenuItem("Salir");
optSalir.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
});
optComenzar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ventana.setSize(300,300);
ventana.setVisible(true);
}
});
popup.add(optComenzar);
popup.add(optSalir);
icono = new TrayIcon(imagen, "Tray", popup);
icono.setImageAutoSize(true);
icono.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
if(e.getButton() == 1){
ventana.setSize(300,300);
ventana.setVisible(true);
}
}
});
try {
tray.add(icono);
} catch (AWTException e1) {
System.out.println(e1.getStackTrace());
}
}
}
}


Creo que es fácil entender y usar.

Primero que todo hay que preguntar si nuestro sistema operativo soporta SystemTray (es decir, SystemTray.isSupported()) de ser así creo la instancia de SystemTray, elijo la imagen que va a ser colocada en la bandeja de escritorio a través de la clase Image, recuerde que esta imagen debe estar en la misma ruta del proyecto Java.

Creo un menú auxiliar (PopupMenu) que se desplegará si el usuario hace clic secundario en este ícono, tendrá dos opciones comenzar la aplicación (llama a ventana Swing.JFrame principal de la aplicación por supuesto) o salir (System.exit(0)), creo un TrayIcon llamado icono que que será el ícono de la aplicación pasándole la imagen seleccionada, ajusto con setImageAutoSize(true) para que la imagen se ajuste al tamaño del ícono de la bandeja de Escritorio, si el usuario hace clic en el ícono con el botón principal también se desplega la ventana principal. Por último y muy importante es agregar el icono (TrayIcon) al tray, una vez hecho esto, el ícono queda visible en el system tray, es decir, la bandeja de escritorio, cerca del reloj, antivirus, etc...

Bueno esto es todo por ahora, espero haberme explicado y les sea de utilidad este post. Nos vemos en una próxima edición.

1 comentario:

Paolo dijo...
Este comentario ha sido eliminado por el autor.