我想知道Java或JFrame是否可以在程序中发生某些事情时提醒用户。例如,在Skype中收到新消息时,Skype图标背景将变为黄色。
我可以用Java做到吗?
答案 0 :(得分:5)
至少你可以通过调用看似通知的JFrame#setIconImage()方法来更改JFrame的图标,如果需要也可以更改标题。
在有任何通知时创建要显示的图标,并在代码中的任何位置设置图标。
要创建一个发光(闪烁)效果,您可以使用两个图像,并使用Swing Timer以最小化形式按窗口间隔交换,并在再次取消图标窗口时停止计时器。
示例代码:
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();
}
});