您的位置:首页 > 编程语言 > Java开发

[JAVA]从零开始的“桌面宠物”之路(二):系统托盘与任务栏

2017-12-05 13:27 459 查看
>今天的目标

    在Window系统下,打开QQ宠物,我们并不能再任务栏看到相关的窗口。这也很好理解,毕竟桌面宠物就相当于一个桌面挂件,如果这个挂件侵入到我们的工作区(任务栏),就很烦,也很影响工作效率:当我们需要在多个窗口中切换时,要把鼠标多略过一个“桌面宠物”的图标。

    所以桌面宠物拥有一个独立的任务栏图标,显然不是一个合适的设计。但取消了任务栏,我该在哪退出这个宠物呢?其中一个方法是,右键宠物,弹出相关的控制内容,如:

 


     这个方法当然没有问题,但我们可能在工作时,需要桌面宠物完全隐藏到窗口外面去(类似360的悬浮球那种效果),省得占用我们的视窗空间。但这时就带来了一个问题,如何方便地找到这只宠物和进行相关控制(比如打开状态面板、喂食宠物、退出宠物等操作)。

     QQ宠物是这么做的:



    是的,通过把这些功能收拢到系统托盘里。

    我们的今天的目标就是:隐藏任务栏图标并添加一个系统托盘图标。

>实现源码

    由于没有什么大的难度,直接上代码了:

1.隐藏任务栏图标

    对JFrame框体设置以下属性:

setType(JFrame.Type.UTILITY);

2.设置系统托盘
private void setTray(){
if(SystemTray.isSupported()){// 判断系统是否支持系统托盘
SystemTray tray = SystemTray.getSystemTray(); // 获取当前系统的托盘

// 为托盘添加一个右键弹出菜单
PopupMenu popMenu = new PopupMenu();

MenuItem itemOpen = new MenuItem("打开");
itmOpen.addActionListener(e -> System.out.println("打开"));

MenuItem itemExit = new MenuItem("退出");
itmExit.addActionListener(e -> System.exit(0));

popMenu.add(itemOpen);
popMenu.add(itemExit);

// 设置托盘图标
ImageIcon icon = new ImageIcon("trayIcon.png");
Image image = icon.getImage().getScaledInstance(icon.getIconWidth(),icon.getIconHeight(), Image.SCALE_DEFAULT);

TrayIcon trayIcon = new TrayIcon(image,"桌面宠物",popMenu);
trayIcon.setImageAutoSize(true); // 自适应尺寸,这个属性至关重要

try {
tray.add(trayIcon);
} catch (AWTException e1) {
e1.printStackTrace();
}
}
}

测试运行,中文可能会显示为方块。这个其实不用太在意,打包成jar之后运行显示是正常的。如果在debug开发阶段十分介意这几个方块,给VM Options里加上-Dfile.encoding=gb18030,即可。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 桌面宠物 swing