3

java.awt.SystemTray用来创建和管理托盘图标和气球消息。一切正常。

但我想知道消息显示后是否可以关闭或淡出消息。

现在,用户需要点击气球或关闭气球,否则消息不会消失。

4

1 回答 1

2

我不确定其他平台,但在 Windows 上,只有在机器正在使用时,该消息才会消失 - 即如果用户正在输入内容或移动鼠标。如果您不移动鼠标或不键入任何内容,则消息将保留在原处。

以下代码为我显示了一条消息。如果我移动鼠标,它会在大约 5 秒后消失。如果我不这样做,它会一直存在,直到我移动鼠标或输入某些内容,然后它就会消失。

final TrayIcon ti = new TrayIcon(XTPSkin.getInstance().getAppIcon().getImage());
final SystemTray st = SystemTray.getSystemTray();
st.add(ti);
ti.displayMessage("foo", "bar", MessageType.INFO);

没有直接的方法可以在时间结束之前删除消息 - 但是,您可以删除TrayIcon(如果需要,请立即重新添加它,尽管确实不建议这样做)。删除TrayIcon导致消息也被删除。

添加到上面的以下代码会导致TrayIcon和 消息都被删除:

SwingUtilities.invokeLater(new Runnable(){
    public void run() {
        try {
            Thread.sleep(1000); // Don't do this
            st.remove(ti);
        } catch (InterruptedException ie) {
            // You won't need this when the sleep is removed
        }
    }
});

笔记:

  • 您需要用一些异常处理来包装上面的第一个代码块AWTException
  • 第二Thread.sleep块中的 严格用于演示目的。由于此代码将在 AWT 线程上执行,因此不应在实际代码中包含该睡眠。
  • TrayIcon以这种方式不断删除和重新添加可能是一个坏主意。由于如果用户正在使用机器,消息确实会消失,因此不这样做可能是最明智的。
于 2011-09-23T14:13:04.313 回答