Cómo crear y mostrar una notificación de Windows 10 con Java AWT

Cómo crear y mostrar una notificación de Windows 10 con Java AWT

En Java es bastante confuso cómo generar diferentes tipos de notificaciones o alertas. Algunos desarrolladores prefieren usar JOptionPane, sin embargo, cuando trabajas en un entorno fijo, por ejemplo, en Windows 10, es muy bueno usar los estilos de notificación predeterminados de Windows, por eso te mostraremos un fragmento corto y dulce para mostrar. Una notificación de Windows 10 fácilmente con Java AWT.

El siguiente código genera la notificación deseada en la bandeja del sistema, por lo que simplemente puedes crear un método para ello, envolverlo dentro de tu código o simplemente cambiar el texto de las alertas y eso es todo:

import java.awt.*;
import java.awt.event.*;
import java.awt.TrayIcon.MessageType;
import java.net.MalformedURLException;

try{
    // Obtener solamente una instancia del objeto SystemTray
    SystemTray tray = SystemTray.getSystemTray();

    // Si quieres crear un icono en la bandeja del sistemas como vista previa
    Image image = Toolkit.getDefaultToolkit().createImage("some-icon.png");
    // Alternativamente (si el icono está en el directorio de la clase):
    //Image image = Toolkit.getDefaultToolkit().createImage(getClass().getResource("icon.png"));

    TrayIcon trayIcon = new TrayIcon(image, "Java AWT Tray Demo");
    // Deja que el sistema auto escale si es necesario
    trayIcon.setImageAutoSize(true);
    // Definir texto de tooltip (descripción emergente)
    trayIcon.setToolTip("System tray icon demo");
    tray.add(trayIcon);

    // Mostrar notificación de información:
    trayIcon.displayMessage("Hello, World", "Java Notification Demo", MessageType.INFO);
    // Error:
    // trayIcon.displayMessage("Hello, World", "Java Notification Demo", MessageType.ERROR);
    // Warning:
    // trayIcon.displayMessage("Hello, World", "Java Notification Demo", MessageType.WARNING);
}catch(Exception ex){
    System.err.print(ex);
}

Ten en cuenta que la ejecución del código debe realizarse a través de una instrucción Try-Catch que atrape las 2 excepciones generadas por el código (AWTException, MalformedURLException) o una excepción general (como se muestra arriba).

Ejemplo estructurado

El siguiente ejemplo, muestra una clase de aplicación muy simple que dibuja un botón simple en un Frame. Cuando se haga clic en el botón, aparecerá una notificación de bandeja:

package sandbox;

import java.awt.*;
import java.awt.event.*;
import java.awt.TrayIcon.MessageType;
import java.net.MalformedURLException;

public class Sandbox {
    
    /**
     * Aplicación
     * 
     * @param args 
     */
    public static void main(String[] args) {
        Sandbox app = new Sandbox();
    }
    
    public Sandbox(){
        Frame f = new Frame("Button Example");  
        Button btn = new Button("Click Here");  
        btn.setBounds(50,100,80,30);  
        f.add(btn);  
        f.setSize(400,400);  
        f.setLayout(null);  
        f.setVisible(true);
        
        Sandbox _this = this;
        
        btn.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                if (SystemTray.isSupported()) {
                    try{
                        _this.displayTray();
                    }catch(AWTException ex){
                        
                    }catch(MalformedURLException ex){
                    
                    }
                } else {
                    System.err.println("Bandeja de entrada no soportada!");
                }
            }
        });
    }
    
    public void displayTray() throws AWTException, MalformedURLException {
        // Obtener solamente una instancia del objeto SystemTray
        SystemTray tray = SystemTray.getSystemTray();

        // Si quieres crear un icono en la bandeja del sistemas como vista previa
        Image image = Toolkit.getDefaultToolkit().createImage("icon.png");
        // Alternativamente (si el icono está en el directorio de la clase):
        //Image image = Toolkit.getDefaultToolkit().createImage(getClass().getResource("icon.png"));

        TrayIcon trayIcon = new TrayIcon(image, "Java AWT Tray Demo");
        // Deja que el sistema auto escale si es necesario
        trayIcon.setImageAutoSize(true);
        // Definir texto de tooltip (descripción emergente)
        trayIcon.setToolTip("System tray icon demo");
        tray.add(trayIcon);

        trayIcon.displayMessage("Hello, World", "Java Notification Demo", MessageType.INFO);
    }
}

El código anterior generará el siguiente Frame y mostrará la notificación:

Java Notification Example

Que te diviertas !

Esto podría ser de tu interes

Conviertete en un programador más sociable