JavaとSwingを使用して、通知を作成する(便利な)方法はありますか?通知とは、次のような意味です。
、
(出典: maketecheasier.com )
、または
(ソース: Microsoft.com )
(そのためのより正しい用語はありますか?)クロスプラットフォームで動作するのはいいことですが、私は主にGnomeを使用したUbuntuで動作することに関心があります。可能であれば、システムトレイ/通知領域にアイコンが表示されないようにしたいと思います。
他のすべてが失敗した場合、私はいつでも Java(Firefox)のスライド通知バー) からのスライド通知を使用できます。
半透明のフレーム 装飾なしが必要な場合があります。
クイックデモ
OSX
]
JLabelがシンプルなHTMLを表示することを利用できます
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();
}
}
}
これを行う標準的な方法は、 Swing TrayIcon API を使用することです。それもおそらく最も便利な方法でしょう:)
次のライブラリを強くお勧めします。これは、フルコントロールを提供する通常のJFrame内部通知を提供します。