在Java中的windows中更改通知区域中的图标名称
我创建了一个支持系统托盘通知的程序。我为我的系统托盘设置了一个带有工具提示和气球消息的图标。当我启动程序时,图标出现在Windows中的通知区域图标中,旁边的默认名称是Java(TM)Platform SE Binary。我可以将此默认名称更改为自定义名称(如程序名)吗?请使用此代码在Java中的windows中更改通知区域中的图标名称,java,swing,system-tray,trayicon,Java,Swing,System Tray,Trayicon,我创建了一个支持系统托盘通知的程序。我为我的系统托盘设置了一个带有工具提示和气球消息的图标。当我启动程序时,图标出现在Windows中的通知区域图标中,旁边的默认名称是Java(TM)Platform SE Binary。我可以将此默认名称更改为自定义名称(如程序名)吗?请使用此代码 import java.awt.AWTException; import java.awt.Color; import java.awt.Component; import java.awt.Graphics; i
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);
}
}
}
import java.awt.AWTException;
导入java.awt.Color;
导入java.awt.Component;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.GraphicsConfiguration;
导入java.awt.GraphicsDevice;
导入java.awt.GraphicsEnvironment;
导入java.awt.Image;
导入java.awt.MenuItem;
导入java.awt.PopupMenu;
导入java.awt.SystemTray;
导入java.awt.TrayIcon;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.image.buffereImage;
导入java.beans.PropertyChangeEvent;
导入java.beans.PropertyChangeListener;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入javax.swing.AbstractAction;
导入javax.swing.Action;
导入javax.swing.Icon;
导入javax.swing.ImageIcon;
导入javax.swing.SwingUtilities;
导入javax.swing.Timer;
导入javax.swing.UIManager;
公共类活动托盘{
专用系统托盘;
私人运输公司;
私有图标图标,icon1;
私有图像,图像1;
私人定时器;
公共活动托盘(){
if(SystemTray.isSupported()==false){
System.err.println(“没有可用的系统托盘”);
返回;
}
托盘=SystemTray.getSystemTray();
PropertyChangeListener propListener=新的PropertyChangeListener(){
公共作废属性更改(属性更改事件evt){
TrayIcon oldTray[]=(TrayIcon[])evt.getOldValue();
TrayIcon newTray[]=(TrayIcon[])evt.getNewValue();
System.out.println(oldTray.length+“/”+newTray.length);
}
};
tray.addPropertyChangeListener(“trayIcons”,propListener);
图标=新的BevelArrowIcon(BevelArrowIcon.UP,false,false);
图像=图标图像(图标);
icon1=新的BevelArrowIcon(BevelArrowIcon.DOWN,false,false);
image1=iconToImage(icon1);
PopupMenu popup=新建PopupMenu();
MenuItem=新MenuItem(“你好,世界”);
trayIcon=新trayIcon(图像,“提示文本”,弹出窗口);
ActionListener menuActionListener=新建ActionListener(){
已执行的公共无效操作(操作事件e){
trayIcon.displayMessage(“再见”,“残酷的世界”,
TrayIcon.MessageType.WARNING);
}
};
item.addActionListener(menuActionListener);
弹出。添加(项目);
ActionListener ActionListener=新建ActionListener(){
已执行的公共无效操作(操作事件e){
托盘。移除(trayIcon);
}
};
trayIcon.addActionListener(actionListener);
试一试{
托盘。添加(trayIcon);
start();
}捕获(AWEX){
Logger.getLogger(ActiveTray.class.getName()).log(Level.SEVERE,null,ex);
}
}
私有void start(){
timer=newjavax.swing.timer(125,updateCol());
timer.start();
trayIcon.displayMessage(null,“应用程序已加载”,trayIcon.MessageType.NONE);
}
私有操作updateCol(){
返回新的抽象操作(“图标加载操作”){
私有静态最终长serialVersionUID=1L;
@凌驾
已执行的公共无效操作(操作事件e){
Runnable doRun=new Runnable(){
@凌驾
公开募捐{
Image img=trayIcon.getImage();
if(img==图像){
trayIcon.setImage(图1);
}否则{
trayIcon.setImage(图像);
}
}
};
SwingUtilities.invokeLater(多伦);
}
};
}
公共静态void main(字符串参数[]){
ActiveTray ActiveTray=新的ActiveTray();
}
静态图像图标图标(图标图标){
如果(图像图标的图标实例){
返回((ImageIcon)图标).getImage();
}否则{
int w=icon.getIconWidth();
inth=icon.getIconHeight();
图形环境=
GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd=ge.getDefaultScreenDevice();
GraphicsConfiguration gc=gd.getDefaultConfiguration();
BuffereImage image=gc.createCompatibleImage(w,h);
Graphics2D g=image.createGraphics();
icon.paintIcon(null,g,0,0);
g、 处置();
返回图像;
}
}
静态类BevelArrowIcon实现Icon{
公共静态final int UP=0;//方向
公共静态最终整数下降=1;
私有静态最终int默认值_SIZE=16;
私密色边1;
私人彩色边缘2;
私人色彩填充;
私有整数大小;
私人int方向;
公共斜面箭头图标(整数方向,布尔isRaisedView,
布尔值(isPressedView){
如果(isRaisedView){
如果(isPressedView){
init(UIManager.getColor(“ControlThighlight”),
UIManager.getColor(“controlDkShadow”),
UIManager.getColor(“controlShadow”),
默认值(单位大小、方向);
}否则{
init(UIManager.getColor(“controlHighlight”),
UIManager.getColor(“controlShadow”),
尤马纳