java - alertas - Cómo crear una notificación en swing.
notificaciones push java (4)
Es posible que necesite un marco translúcido sin decoraciones.
Demostración rápida
OSX
]
Puedes aprovechar JLabel muestra HTML simple
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 <a href="http://stackoverflow.com/users/20654/oscarryz">Oscar Reyes</a>
*/
class Translucent 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 Translucent() {
super(true);
timer.start();
}
@Override
public void actionPerformed(ActionEvent e) {
now.setTime(System.currentTimeMillis());
text.setText(String.format("<html><body><font size=''50''>%s</font></body></html>",sdf.format(now)));
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.setUndecorated(true);
setTranslucency(f);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setBackground(new Color(0f, 0f, 0f, 1f / 3f));
JPanel p = new Translucent();
JLabel l = new JLabel("Hola");
l.setFont(new Font(l.getFont().getName(), Font.PLAIN, 128));
p.add(l);
f.add(p);
f.pack();
f.setLocationRelativeTo(null);
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);
if (!mSetWindowOpacity.isAccessible()) {
mSetWindowOpacity.setAccessible(true);
}
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();
}
}
}
Usando Java y Swing, ¿hay alguna forma (conveniente) de crear una notificación? Por notificación, me refiero a algo como:
este http://productivelinux.com/images/notify-osd-screenshot.png , este http://images.maketecheasier.com/2010/01/kfirefox-notify-indexed.png , o
(¿Hay un término más correcto para eso?). Sería bueno si funcionara en varias plataformas, pero me preocupa principalmente que funcione bajo Ubuntu con Gnome. Si es posible, me gustaría evitar tener un icono en la bandeja del sistema / área de notificación.
Si todo lo demás falla, siempre podré usar la notificación deslizante de la barra de notificaciones deslizante en Java (a la Firefox)
No he usado esto, pero parece que JToaster podría ser una buena JToaster . Además, ¿estás abierto a usar SWT? Esto podría darle algunas opciones adicionales ( aquí hay un ejemplo ).
Recomiendo encarecidamente seguir la biblioteca, proporciona JFrame normal dentro de la notificación que da control total.
Una forma estándar de hacerlo es usar Swing TrayIcon API . Eso probablemente sería la forma más conveniente también :)