Pages

Subscribe:

Ads 468x60px

domingo, 28 de abril de 2013

Tela de notificação transparente

Esses dias estava precisando criar uma telinha pra mostrar notificações de novos email recebido.
O programa recebe emails enviados por celulares android, interpreta o XML que está neles e apresenta uma notificação no computador do cliente dizendo que ele recebeu um novo pedido.
Esse código foi muito útil:


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
import java.util.Date;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;


/**
 * Simple demo on how a translucent window
 * looks like when is used to display the system clock.
 * @author Oscar Reyes
 */
public class TranslucencyDemo extends JPanel implements ActionListener {

    private static final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
    private final Date now = new Date();
    private final Timer timer = new Timer(1000, this);
    private final JLabel text = new JLabel();

    public TranslucencyDemo() {
        super(true);
        timer.start();
    }


    @Override
    public void actionPerformed(ActionEvent e) {
        now.setTime(System.currentTimeMillis());
        text.setText(String.format("%s",sdf.format(now)));
    }

    public static void main(String[] args) {

        JFrame f = new JFrame();
        setTranslucency( f );
        f.setUndecorated( true );
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setBackground(new Color(0f, 0f, 0f, 1f / 3f));
        f.add(new Translucent());
        f.pack();
        f.setVisible(true);
    }
    // taken from: http://java.sun.com/developer/technicalArticles/GUI/translucent_shaped_windows/
    private static void setTranslucency( Window window){
        try {
               Class awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities");
               Method mSetWindowOpacity = awtUtilitiesClass.getMethod("setWindowOpacity", Window.class, float.class);
               mSetWindowOpacity.invoke(null, window, Float.valueOf(0.75f));
            } catch (NoSuchMethodException ex) {
               ex.printStackTrace();
            } catch (SecurityException ex) {
               ex.printStackTrace();
            } catch (ClassNotFoundException ex) {
               ex.printStackTrace();
            } catch (IllegalAccessException ex) {
               ex.printStackTrace();
            } catch (IllegalArgumentException ex) {
               ex.printStackTrace();
            } catch (InvocationTargetException ex) {
               ex.printStackTrace();
            }
    }
}
Fonte: http://stackoverflow.com/questions/3240415/how-to-create-a-notification-in-swing

Esse exemplo mostra a data em períodos pré-determinados. Você pode condicionar essa exibição. No meu caso a condição era a chegada de um novo email.
Esse é o resultado do código:

Vc pode altera a tela, a sua localização, seus componentes, criar um Listener pra abrir seu programa quando o usuário clicar nela. Enfim, usem a criatividade :D

Outro projeto interessante para o mesmo fim é o Twinkle: http://www.swingfx.ch/twinkle
Deem uma olhada. Mas ele não pode ser usado com propósitos comerciais :(
Mas é muito bom e fácil de usar! Vejam aqui: http://blog.swingfx.ch/

Espero que seja útil!