闪烁托盘图标

闪烁托盘图标,第1张

闪烁托盘图标
  • 在某些情况下,以输出闪烁的图标更改图标没有问题

  • 创建一个

    Arrays of BufferedImage
    或队列

  • 在所需事件上启动Swing计时器,并在一段时间内更改

    BufferedImage
    或图标

  • 停止

    Swing Timer
    一段时间后残留或添加
    ActionListener
    Message
    ,另一种方式可以是确定
    LEFT
    RIGHT
    从鼠标按钮
    MouseListener
    (用于
    Icon
    System Tray
    )一个用于停止
    Timer
    ,对于第二
    JPopup

编辑

例如,正如我提到的,您可以添加ActionListener或MouseListener,在那里可以停止Swing
Timer

import java.awt.AWTException;import java.awt.Color;import java.awt.Component;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.GraphicsConfiguration;import java.awt.GraphicsDevice;import java.awt.GraphicsEnvironment;import java.awt.Image;import java.awt.MenuItem;import java.awt.PopupMenu;import java.awt.SystemTray;import java.awt.TrayIcon;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.image.BufferedImage;import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.AbstractAction;import javax.swing.Action;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.SwingUtilities;import javax.swing.Timer;import javax.swing.UIManager;public class ActiveTray {    private SystemTray tray;    private TrayIcon trayIcon;    private Icon icon, icon1;    private Image image, image1;    private Timer timer;    public ActiveTray() {        if (SystemTray.isSupported() == false) { System.err.println("No system tray available"); return;        }        tray = SystemTray.getSystemTray();        PropertyChangeListener propListener = new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) {     TrayIcon oldTray[] = (TrayIcon[]) evt.getOldValue();     TrayIcon newTray[] = (TrayIcon[]) evt.getNewValue();     System.out.println(oldTray.length + " / " + newTray.length); }        };        tray.addPropertyChangeListener("trayIcons", propListener);        icon = new BevelArrowIcon(BevelArrowIcon.UP, false, false);        image = iconToImage(icon);        icon1 = new BevelArrowIcon(BevelArrowIcon.DOWN, false, false);        image1 = iconToImage(icon1);        PopupMenu popup = new PopupMenu();        MenuItem item = new MenuItem("Hello, World");        trayIcon = new TrayIcon(image, "Tip Text", popup);        ActionListener menuActionListener = new ActionListener() { public void actionPerformed(ActionEvent e) {     trayIcon.displayMessage("Good-bye", "Cruel World",  TrayIcon.MessageType.WARNING); }        };        item.addActionListener(menuActionListener);        popup.add(item);        ActionListener actionListener = new ActionListener() { public void actionPerformed(ActionEvent e) {     tray.remove(trayIcon); }        };        trayIcon.addActionListener(actionListener);        try { tray.add(trayIcon); start();        } catch (AWTException ex) { Logger.getLogger(ActiveTray.class.getName()).log(Level.SEVERE, null, ex);        }    }    private void start() {        timer = new javax.swing.Timer(125, updateCol());        timer.start();        trayIcon.displayMessage(null, "  Aplication Loaded  ", TrayIcon.MessageType.NONE);    }    private Action updateCol() {        return new AbstractAction("Icon load action") { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) {     Runnable doRun = new Runnable() {         @Override         public void run() {  Image img = trayIcon.getImage();  if (img == image) {      trayIcon.setImage(image1);  } else {      trayIcon.setImage(image);  }         }     };     SwingUtilities.invokeLater(doRun); }        };    }    public static void main(String args[]) {        ActiveTray activeTray = new ActiveTray();    }    static Image iconToImage(Icon icon) {        if (icon instanceof ImageIcon) { return ((ImageIcon) icon).getImage();        } else { int w = icon.getIconWidth(); int h = icon.getIconHeight(); GraphicsEnvironment ge =         GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice gd = ge.getDefaultScreenDevice(); GraphicsConfiguration gc = gd.getDefaultConfiguration(); BufferedImage image = gc.createCompatibleImage(w, h); Graphics2D g = image.createGraphics(); icon.paintIcon(null, g, 0, 0); g.dispose(); return image;        }    }    static class BevelArrowIcon implements Icon {        public static final int UP = 0;         // direction        public static final int DOWN = 1;        private static final int DEFAULT_SIZE = 16;        private Color edge1;        private Color edge2;        private Color fill;        private int size;        private int direction;        public BevelArrowIcon(int direction, boolean isRaisedView,     boolean isPressedView) { if (isRaisedView) {     if (isPressedView) {         init(UIManager.getColor("controlLtHighlight"),      UIManager.getColor("controlDkShadow"),      UIManager.getColor("controlShadow"),      DEFAULT_SIZE, direction);     } else {         init(UIManager.getColor("controlHighlight"),      UIManager.getColor("controlShadow"),      UIManager.getColor("control"),      DEFAULT_SIZE, direction);     } } else {     if (isPressedView) {         init(UIManager.getColor("controlDkShadow"),      UIManager.getColor("controlLtHighlight"),      UIManager.getColor("controlShadow"),      DEFAULT_SIZE, direction);     } else {         init(UIManager.getColor("controlShadow"),      UIManager.getColor("controlHighlight"),      UIManager.getColor("control"),      DEFAULT_SIZE, direction);     } }        }        public BevelArrowIcon(Color edge1, Color edge2, Color fill,     int size, int direction) { init(edge1, edge2, fill, size, direction);        }        @Override        public void paintIcon(Component c, Graphics g, int x, int y) { switch (direction) {     case DOWN:         drawDownArrow(g, x, y);         break;     case UP:         drawUpArrow(g, x, y);         break; }        }        @Override        public int getIconWidth() { return size;        }        @Override        public int getIconHeight() { return size;        }        private void init(Color edge1, Color edge2, Color fill,     int size, int direction) { edge1 = Color.red; edge2 = Color.blue; this.edge1 = edge1; this.edge2 = edge2; this.fill = fill; this.size = size; this.direction = direction;        }        private void drawDownArrow(Graphics g, int xo, int yo) { g.setColor(edge1); g.drawLine(xo, yo, xo + size - 1, yo); g.drawLine(xo, yo + 1, xo + size - 3, yo + 1); g.setColor(edge2); g.drawLine(xo + size - 2, yo + 1, xo + size - 1, yo + 1); int x = xo + 1; int y = yo + 2; int dx = size - 6; while (y + 1 < yo + size) {     g.setColor(edge1);     g.drawLine(x, y, x + 1, y);     g.drawLine(x, y + 1, x + 1, y + 1);     if (0 < dx) {         g.setColor(fill);         g.drawLine(x + 2, y, x + 1 + dx, y);         g.drawLine(x + 2, y + 1, x + 1 + dx, y + 1);     }     g.setColor(edge2);     g.drawLine(x + dx + 2, y, x + dx + 3, y);     g.drawLine(x + dx + 2, y + 1, x + dx + 3, y + 1);     x += 1;     y += 2;     dx -= 2; } g.setColor(edge1); g.drawLine(xo + (size / 2), yo + size - 1, xo         + (size / 2), yo + size - 1);        }        private void drawUpArrow(Graphics g, int xo, int yo) { g.setColor(edge1); int x = xo + (size / 2); g.drawLine(x, yo, x, yo); x--; int y = yo + 1; int dx = 0; while (y + 3 < yo + size) {     g.setColor(edge1);     g.drawLine(x, y, x + 1, y);     g.drawLine(x, y + 1, x + 1, y + 1);     if (0 < dx) {         g.setColor(fill);         g.drawLine(x + 2, y, x + 1 + dx, y);         g.drawLine(x + 2, y + 1, x + 1 + dx, y + 1);     }     g.setColor(edge2);     g.drawLine(x + dx + 2, y, x + dx + 3, y);     g.drawLine(x + dx + 2, y + 1, x + dx + 3, y + 1);     x -= 1;     y += 2;     dx += 2; } g.setColor(edge1); g.drawLine(xo, yo + size - 3, xo + 1, yo + size - 3); g.setColor(edge2); g.drawLine(xo + 2, yo + size - 2, xo + size - 1, yo + size - 2); g.drawLine(xo, yo + size - 1, xo + size, yo + size - 1);        }    }}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5564932.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存