java桌面宠物swing实现
java桌面宠物swing实现
在bilibili上看到一个少前小人的桌面程序
但他是Python写的。
于是就打算自己写一个java的
csdn上也有不少的桌面宠物程序,也给我提供了很好的参考
利用swing的图片替换实现动画效果
参考文档
https://blog.csdn.net/JunyAn_Cyw/article/details/81346875
https://blog.csdn.net/Shenpibaipao/article/details/78704714
完整代码
package teacher_silence.com.gitee;import javax.swing.*;
import java.awt.*;import java.awt.dnd.*;
import java.awt.event.*;public class TestBody {private static JFrame frame;private static JLabel jLabel;Thread test=new Thread(new Def());
// Thread test2=new Thread(new Cli());int flag1=1;//动作转换判断标志
// boolean flag2=true;public TestBody(){frame = new JFrame("digimonDesktopPet");//设置随机位置并显示在最前端frame.setLocation( (int)( Math.random()*100),(int)(Math.random()*100));//注意int强转时后面的括号也药带上frame.setAlwaysOnTop(true);
// 窗体sizeframe.setSize(200, 200);
// 样式frame.getContentPane().setLayout(null);frame.setTitle("测试动画");frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);frame.setType(JFrame.Type.UTILITY);// 动画的承载体setTray();jLabel = new JLabel();// 初始化第一张图cgJLabelImg(jLabel,"res/default/skeleton-standing0.png");frame.add(jLabel);
// 体透明frame.setUndecorated(true); // 取消窗口标题栏frame.setBackground(new Color(0,0,0,0));// 背景frame.setVisible(true);Point origin = new Point();frame.addMouseListener(new MouseAdapter() {@Overridepublic void mousePressed(MouseEvent e) {// 当鼠标按下的时候获得窗口当前的位置origin.x = e.getX();origin.y = e.getY();flag1=2;
// try {
// test.sleep(1000 * 60 * 60);
// }catch (InterruptedException E){
//
// }
// test2.start();
// flag1=false;
// flag2=true;
// try{
// test.wait();
// }catch (InterruptedException m){
//
// }
// }
// @Override
// public void mouseClicked(MouseEvent e) {
// Digimon.startEat();}public void mouseEntered(MouseEvent e){flag1=3;}public void mouseExited(MouseEvent e){flag1=1;}public void mouseReleased(MouseEvent e){flag1=1;}});frame.addMouseMotionListener(new MouseMotionAdapter() {// 拖动(mouseDragged 指的不是鼠标在窗口中移动,而是用鼠标拖动)public void mouseDragged(MouseEvent e) {// 当鼠标拖动时获取窗口当前位置
// test2.start();Point p = frame.getLocation();// 设置窗口的位置// 窗口当前的位置 + 鼠标当前在窗口的位置 - 鼠标按下的时候在窗口的位置int x = p.x + e.getX() - origin.x;int y = p.y + e.getY()- origin.y;frame.setLocation(x, y);
// flag1=true;
// try {
// test2.sleep(1000 * 60 * 60);
// }catch (InterruptedException r){
//
// }
// test.interrupt();更新配置文件
// FileUtil.updateFile(configPath,configName,"pox","" + x);
// FileUtil.updateFile(configPath,configName,"poy","" + y);}});// 动画线程test.start();//test2.start();//构造结束}class Def implements Runnable{@Overridepublic void run() {int i = 1;try {while (true) {Thread.sleep(50);if(flag1==1)cgJLabelImg(jLabel, "res/default/skeleton-standing" + i++ + ".png");else if (flag1==2)cgJLabelImg(jLabel, "res/clickTwo/skeleton-playing" + i++ + ".png");elsecgJLabelImg(jLabel, "res/grabed/skeleton-grabed" + i++ + ".png");if (i > 60) i = 1;}} catch (Exception e) {e.printStackTrace();}}}// class Cli implements Runnable{
// @Override
// public void run() {try{test.wait();}catch (InterruptedException e){}
// int i = 1;
// try {
// while (flag2) {
// Thread.sleep(50);
// cgJLabelImg(jLabel, "res/clickTwo/skeleton-playing" + i++ + ".png");
// if (i > 60) i = 1;
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// }private void cgJLabelImg(JLabel jLabel,String imgUrl){ImageIcon icon = new ImageIcon(imgUrl);int picWidth = icon.getIconWidth(),pinHeight = icon.getIconHeight();icon.setImage(icon.getImage().getScaledInstance(picWidth,pinHeight, Image.SCALE_DEFAULT));jLabel.setBounds(0,0,picWidth,pinHeight);jLabel.setIcon(icon);}private void setTray() {if (SystemTray.isSupported()) {// 判断系统是否支持系统托盘SystemTray tray = SystemTray.getSystemTray(); // 获取当前系统的托盘// 为托盘添加一个右键弹出菜单PopupMenu popMenu = new PopupMenu();MenuItem itemOpen = new MenuItem("打开");itemOpen.addActionListener(e -> frame.setVisible(true));MenuItem itemHide = new MenuItem("隐藏");itemHide.addActionListener(e -> frame.setVisible(false));MenuItem itemExit = new MenuItem("退出");itemExit.addActionListener(e -> System.exit(0));popMenu.add(itemOpen);popMenu.add(itemHide);popMenu.add(itemExit);// 设置托盘图标ImageIcon icon = new ImageIcon("girl1.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();}}}public static void main(String[] args){new TestBody();}
}
工程文件下载
https://gitee.com/teacher_silence/teacher_silence_workshop
里面的windowspet.zip
项目运行结果图
一开始是想开两个线程,一个负责默认,一个负责拖动的样式,后来发现复杂,还不好实现,后来直接用一个线程,再利用一个flag来判断是什么状态。这样就简单很多。
java桌面宠物swing实现相关推荐
- 记录java桌面程序swing布局的痛心
最近需要做一些桌面程序,因为我比较擅长的语言是java,php:只能选择java来做,于是先仿照一些桌面程序来布局练下手,下面就是代码记录了,讲真过程有点痛苦,一度的想换javafx,但是群里朋友说, ...
- [JAVA]从零开始的“桌面宠物”之路(一):动画效果
>我将要做一个什么? 也算是突发奇想,以前一直用C#写的桌面应用,但最近有点沉迷JAVA,加上最近不小心打开了阔别十来年的QQ宠物(现在QQ宠物Client已经变得都是广告了),想起了瑞星小狮子 ...
- java 创建桌面宠物
QQ宠物终于因为玩家稀少而挂掉了, 但是想一想还有点怀念(其实早就弃了) 再加上追了近三年, 数码宝贝tri 也算就此完结了, 再一次勾起了童年, 以及.....我为毛不能自己养数码宝贝呢(手动滑稽) ...
- 桌宠必须要java吗_桌宠软件电脑版下载_桌面宠物软件免费版下载_3DM软件
<桌宠>是一款桌面宠物软件,软件能够让你根据自己的喜好设置一只宠物,然后它会放养在你的桌面上,你要像真实的宠物一样照顾它,饲养喂食,给他治病陪他玩耍,这个过程非常有趣. 软件简介 在网上下 ...
- [JAVA]从零开始的“桌面宠物”之路(二):系统托盘与任务栏
>今天的目标 在Window系统下,打开QQ宠物,我们并不能再任务栏看到相关的窗口.这也很好理解,毕竟桌面宠物就相当于一个桌面挂件,如果这个挂件侵入到我们的工作区(任务栏),就很烦,也很影响工作 ...
- 一键搞定Java桌面应用安装部署 —— exe4j + Inno Setup 带着JRE, 8M起飞
转载自:http://www.blogjava.net/huliqing/archive/2008/04/18/193907.html 对于作Java桌面应用来说,比较烦人的就是安装部署问题,客户端是 ...
- java桌面版_长大了Java! 提出Java桌面版
java桌面版 不,这不是另一个" Java已死"的咆哮. Java非常活跃. 它是可用的最佳开发和运行时平台之一. 迄今为止,最稳定的平台. 那可能只是它最大的祸根. 荒谬! 稳 ...
- HTML5崛起之时,Java桌面时代就已经终结了
来源:AI前线 作者:Steve Hannah 翻译:核子可乐 编辑:燕珊 2004 年 Google Maps 的面世标志着 Java 桌面时代的终结,也改变了桌面环境下"跨平台" ...
- python桌面程序打开慢_转 : 终于搞清楚了为什么Java桌面程序总是感觉慢的原因...
终于搞清楚了为什么Java桌面程序总是感觉慢的原因! 按照道理服务器和浏览器都在用脚本和虚拟机,那些不慢,而Java的桌面程序总是感觉响应迟钝呢?主要有两个原因,一是服务器和浏览器都是异步的,提交到渲 ...
最新文章
- 中国信通院发布《区块链基础设施研究报告(2021年)》
- windows 下使用caffy_折腾下Windows下的Elasticsearch安装与使用
- C++面试题:list和vector有什么区别
- oracle 性别默认是男_被实名举报“制造性别对立”的杨笠,到底冤不冤?
- ORA-01123:无法启动联机备份;未启用介质恢复(错误分析)
- 【Android源码】Activity如何加载布局
- et al、e.g.、i.e.读音及释义
- python 爬虫 微博 github_GitHub - peanut-shi/weiboSpider: 新浪微博爬虫,用python爬取新浪微博数据...
- opencv 读取视频、打开摄像头、写入视频文件
- 机器学习 决策树 监督_监督机器学习-决策树分类器简介
- 如何快速生成100万不重复的8位随机编号?
- 高质量的C/C++编程(2)----程序员必看系列
- 从Simulink到PX4——Simulink-PX4插件安装与环境搭建
- c语言程序方差的计算公式,方差计算公式
- python画一棵树的心理测试,【心理测试】画树测试:一棵树读你的人生
- python输入随机的口算算式_excel随机取整函数:如何快速生成低龄口算算式
- 常见的的水生植物图像
- 查看电脑可支持最大内存容量的方法
- 接口测试(二)接口测试用例设计
- 【实践】Ceph:创建Cephfs文件