我在想Java或JFrame能否在程序中发生某些事情时向用户发出警报。例如,在Skype中收到新消息时,Skype图标的背景会变成黄色。
!["您收到了一条新消息!"](https://istack.dev59.com/Yms9P.webp)
我能在Java中做到这点吗?
我能在Java中做到这点吗?
通过调用JFrame#setIconImage()方法,至少可以更改JFrame的图标,该图标看起来像是一条通知,并在需要时更改标题。
创建一个自定义的图标,在代码中任何你想要展示的地方设置该图标。
要创建一个发光 (闪烁) 效果,可以使用两个图像,并在窗口处于最小化形式时使用Swing Timer交换这两个图像,并在窗口再次还原时停止计时器。
阅读更多:如何使用 Swing 计时器
示例代码:
private boolean swap;
private Timer timer;
....
final Image onImage = new ImageIcon(ImageIO.read(new File("resources/1.png"))).getImage();
final Image offImage = new ImageIcon(ImageIO.read(new File("resources/2.png"))).getImage();
// interval of 500 milli-seconds
timer = new Timer(500, new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
if (swap) {
setIconImage(onImage);
} else {
setIconImage(offImage);
}
swap = !swap;
}
});
timer.setRepeats(true);
// check whether window is in ICONIFIED state or not
if (getExtendedState() == JFrame.ICONIFIED) {
timer.start();
}
addWindowListener(new WindowAdapter() {
public void windowDeiconified(WindowEvent e) {
// set the icon back to default when window is DEICONIFIED
timer.stop();
}
});