目录

一、效果

二、教程

三、代码


一、效果

首先我们先来看一下效果:(以下运行成功均动态效果

我们点击左右两边的图标,Tom猫便可做出相应的动作,例如,点击“牛奶”这个图标,Tom猫的反应:

当然,点击Tom猫的小肚子和头也会出现做出其他的小动作。

二、教程

1、使用IDEA搭建一个项目,项目名称:TomCat(可根据自己的喜好)

具体搭建过程可看博文用IDEA构建一个简单的Java程序范例,这里就不详细说了。

2、下载相应的动作图片Animations文件和按钮Buttons文件,并且放在 项目 --> target --> classes --> Tomcat

下载地址:

Animations   提取码:Anim

Buttons  提取码:Butt

3、TomCat.class

(1)导入包

import java.awt.Component;
import javax.swing.JFrame;

(2)主函数

在这里我的panel大小设置的是350*600,是根据我的图片的大小设定的。

public static void main(String[] args) {JFrame frame = new JFrame("Tom猫");TomCatPanel panel = new TomCatPanel();frame.add(panel);Thread t = new Thread(panel);t.start();panel.addMouseListener(panel);frame.setDefaultCloseOperation(3);frame.setSize(350, 600);frame.setLocationRelativeTo((Component)null);frame.setVisible(true);}

4、TomCatPanel.class

(1)导入包

import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;

(2)类的继承,接口的实现

  • JPanel类:面板组件,非顶层容器
  • MouseListener:鼠标监听接口
public class TomCatPanel extends JPanel implements Runnable, MouseListener{}

(3)类型的定义

  • back:BufferedImage,为Tom猫的背景
  • eat, cymbal, drink, fart, pie, scratch:BufferedImage,为界面的6个不同的按钮。分别表示吃、敲锣、喝、放屁、扔、抓6个动作
  • path:图片路径
  • count:int
  • index:int
  • flag:boolean
BufferedImage back;
BufferedImage eat;
BufferedImage cymbal;
BufferedImage drink;
BufferedImage fart;
BufferedImage pie;
BufferedImage scratch;
String[] paths = new String[100];
int count = 0;
int index = 0;
boolean flag = false;

(4)画布函数TomCatPanel()

在这里定义Tom猫的背景图片

  • back:Tom猫的背景图片
  • eat:画布上的吃东西的按钮
  • cymbal:画布上敲锣的按钮
  • drink:画布上喝牛奶的按钮
  • fart:画布上放屁的按钮
  • pie:画布上pizza的按钮
  • scratch:画布上抓的按钮
public TomCatPanel() {try {this.back = ImageIO.read(TomCatPanel.class.getResource("Animations/Eat/eat_00.jpg"));this.eat = ImageIO.read(TomCatPanel.class.getResource("Buttons/eat.png"));this.cymbal = ImageIO.read(TomCatPanel.class.getResource("Buttons/cymbal.png"));this.drink = ImageIO.read(TomCatPanel.class.getResource("Buttons/drink.png"));this.fart = ImageIO.read(TomCatPanel.class.getResource("Buttons/fart.png"));this.pie = ImageIO.read(TomCatPanel.class.getResource("Buttons/pie.png"));this.scratch = ImageIO.read(TomCatPanel.class.getResource("Buttons/scratch.png"));} catch (IOException var2) {var2.printStackTrace();}}

(5)画笔函数paint()

  • 画笔名称g
  • 背景及按钮的位置,及大小
public void paint(Graphics g) {super.paint(g);g.drawImage(this.back, 0, 0, 350, 600, (ImageObserver)null);g.drawImage(this.eat, 20, 300, 50, 50, (ImageObserver)null);g.drawImage(this.cymbal, 20, 370, 50, 50, (ImageObserver)null);g.drawImage(this.drink, 20, 440, 50, 50, (ImageObserver)null);g.drawImage(this.fart, 265, 300, 50, 50, (ImageObserver)null);g.drawImage(this.pie, 265, 370, 50, 50, (ImageObserver)null);g.drawImage(this.scratch, 265, 440, 50, 50, (ImageObserver)null);}

(6)线程函数run()

由于每个动作的图片的张数不同,因为我们每次更新图片时,需要判断图片的更新图片的次数是否大于图片的总数,如果超过,flag = false,停止更新。

public void run() {while(true) {if (this.flag) {++this.index;if (this.index >= this.count) {this.index = 0;this.flag = false;}try {this.back = ImageIO.read(TomCatPanel.class.getResource(this.paths[this.index]));} catch (IOException var3) {var3.printStackTrace();}}try {Thread.sleep(50);} catch (InterruptedException var2) {var2.printStackTrace();}this.repaint();}}

(7)鼠标点击函数mousePressed(MouseEvent e)

mouseX,mouseY:为鼠标的坐标

根据鼠标的坐标,来判断Tom猫的动作。

public void mousePressed(MouseEvent e) {int mouseX = e.getX();int mouseY = e.getY();if (mouseX > 20 && mouseX < 70 && mouseY > 300 && mouseY < 350) {this.count = 40;this.updateImage("eat");this.flag = true;}if (mouseX > 20 && mouseX < 70 && mouseY > 370 && mouseY < 420) {this.count = 13;this.updateImage("cymbal");this.flag = true;}if (mouseX > 20 && mouseX < 70 && mouseY > 440 && mouseY < 490) {this.count = 81;this.updateImage("drink");this.flag = true;}if (mouseX > 265 && mouseX < 315 && mouseY > 300 && mouseY < 350) {this.count = 28;this.updateImage("fart");this.flag = true;}if (mouseX > 265 && mouseX < 315 && mouseY > 370 && mouseY < 420) {this.count = 24;this.updateImage("pie");this.flag = true;}if (mouseX > 265 && mouseX < 315 && mouseY > 440 && mouseY < 490) {this.count = 56;this.updateImage("scratch");this.flag = true;}if (mouseX > 100 && mouseX < 250 && mouseY > 100 && mouseY < 250) {this.count = 81;this.updateImage("knockout");this.flag = true;}if (mouseX > 120 && mouseX < 230 && mouseY > 400 && mouseY < 500) {this.count = 34;this.updateImage("stomach");this.flag = true;}if (mouseX > 235 && mouseX < 285 && mouseY > 450 && mouseY < 540) {this.count = 26;this.updateImage("angry");this.flag = true;}if (mouseX > 120 && mouseX < 170 && mouseY > 520 && mouseY < 560) {this.count = 30;this.updateImage("footRight");this.flag = true;}if (mouseX > 175 && mouseX < 225 && mouseY > 520 && mouseY < 560) {this.count = 30;this.updateImage("footLeft");this.flag = true;}this.repaint();}

(8)图片更新函数updateImage()

public void updateImage(String str) {for(int i = 0; i < this.count; ++i) {if (i < 10) {this.paths[i] = "Animations/" + str + "/" + str + "_0" + i + ".jpg";} else {this.paths[i] = "Animations/" + str + "/" + str + "_" + i + ".jpg";}}}

三、代码

1、TomCat.class

package TomCat;import java.awt.Component;
import javax.swing.JFrame;public class TomCat {public static void main(String[] args) {JFrame frame = new JFrame("Tom猫");TomCatPanel panel = new TomCatPanel();frame.add(panel);Thread t = new Thread(panel);t.start();panel.addMouseListener(panel);frame.setDefaultCloseOperation(3);frame.setSize(350, 600);frame.setLocationRelativeTo((Component)null);frame.setVisible(true);}
}

2、TomCatPanel.class

package TomCat;import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;public class TomCatPanel extends JPanel implements Runnable, MouseListener {BufferedImage back;BufferedImage eat;BufferedImage cymbal;BufferedImage drink;BufferedImage fart;BufferedImage pie;BufferedImage scratch;String[] paths = new String[100];int count = 0;int index = 0;boolean flag = false;public TomCatPanel() {try {this.back = ImageIO.read(TomCatPanel.class.getResource("Animations/Eat/eat_00.jpg"));this.eat = ImageIO.read(TomCatPanel.class.getResource("Buttons/eat.png"));this.cymbal = ImageIO.read(TomCatPanel.class.getResource("Buttons/cymbal.png"));this.drink = ImageIO.read(TomCatPanel.class.getResource("Buttons/drink.png"));this.fart = ImageIO.read(TomCatPanel.class.getResource("Buttons/fart.png"));this.pie = ImageIO.read(TomCatPanel.class.getResource("Buttons/pie.png"));this.scratch = ImageIO.read(TomCatPanel.class.getResource("Buttons/scratch.png"));} catch (IOException var2) {var2.printStackTrace();}}public void paint(Graphics g) {super.paint(g);g.drawImage(this.back, 0, 0, 350, 600, (ImageObserver)null);g.drawImage(this.eat, 20, 300, 50, 50, (ImageObserver)null);g.drawImage(this.cymbal, 20, 370, 50, 50, (ImageObserver)null);g.drawImage(this.drink, 20, 440, 50, 50, (ImageObserver)null);g.drawImage(this.fart, 265, 300, 50, 50, (ImageObserver)null);g.drawImage(this.pie, 265, 370, 50, 50, (ImageObserver)null);g.drawImage(this.scratch, 265, 440, 50, 50, (ImageObserver)null);}public void run() {while(true) {if (this.flag) {++this.index;if (this.index >= this.count) {this.index = 0;this.flag = false;}try {this.back = ImageIO.read(TomCatPanel.class.getResource(this.paths[this.index]));} catch (IOException var3) {var3.printStackTrace();}}try {Thread.sleep(50);} catch (InterruptedException var2) {var2.printStackTrace();}this.repaint();}}public void mouseClicked(MouseEvent e) {}public void mousePressed(MouseEvent e) {int mouseX = e.getX();int mouseY = e.getY();if (mouseX > 20 && mouseX < 70 && mouseY > 300 && mouseY < 350) {this.count = 40;this.updateImage("eat");this.flag = true;}if (mouseX > 20 && mouseX < 70 && mouseY > 370 && mouseY < 420) {this.count = 13;this.updateImage("cymbal");this.flag = true;}if (mouseX > 20 && mouseX < 70 && mouseY > 440 && mouseY < 490) {this.count = 81;this.updateImage("drink");this.flag = true;}if (mouseX > 265 && mouseX < 315 && mouseY > 300 && mouseY < 350) {this.count = 28;this.updateImage("fart");this.flag = true;}if (mouseX > 265 && mouseX < 315 && mouseY > 370 && mouseY < 420) {this.count = 24;this.updateImage("pie");this.flag = true;}if (mouseX > 265 && mouseX < 315 && mouseY > 440 && mouseY < 490) {this.count = 56;this.updateImage("scratch");this.flag = true;}if (mouseX > 100 && mouseX < 250 && mouseY > 100 && mouseY < 250) {this.count = 81;this.updateImage("knockout");this.flag = true;}if (mouseX > 120 && mouseX < 230 && mouseY > 400 && mouseY < 500) {this.count = 34;this.updateImage("stomach");this.flag = true;}if (mouseX > 235 && mouseX < 285 && mouseY > 450 && mouseY < 540) {this.count = 26;this.updateImage("angry");this.flag = true;}if (mouseX > 120 && mouseX < 170 && mouseY > 520 && mouseY < 560) {this.count = 30;this.updateImage("footRight");this.flag = true;}if (mouseX > 175 && mouseX < 225 && mouseY > 520 && mouseY < 560) {this.count = 30;this.updateImage("footLeft");this.flag = true;}this.repaint();}public void mouseReleased(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void updateImage(String str) {for(int i = 0; i < this.count; ++i) {if (i < 10) {this.paths[i] = "Animations/" + str + "/" + str + "_0" + i + ".jpg";} else {this.paths[i] = "Animations/" + str + "/" + str + "_" + i + ".jpg";}}}
}

JAVA实现Tom猫相关推荐

  1. tom猫变声原理解析

    很多网友对会说话的TOM猫的原理比较感兴趣,这里Android123就实现做一个简单的分析: 1. 音频采集 这点主要是通过Android设备的麦克风实时采集音频,由于Android平台的MediaR ...

  2. 会说话的TOM猫的原理是什么

    很多网友对会说话的TOM猫的原理比较感兴趣,这里Android123就实现做一个简单的分析: 1. 音频采集 这点主要是通过Android设备的麦克风实时采集音频,由于Android平台的MediaR ...

  3. iOS开发脚踏实地学习day02-图片查看器和TOM猫

    1.在.m文件中使用self.XX和_XX有什么区别? 在用懒加载,使用getter,让对象在最需要的时候创建时,用_XX实现不了,一定要用self.XX才可以. 前者调用该类的setter或gett ...

  4. java毕业设计流浪猫狗救助网站源码+lw文档+mybatis+系统+mysql数据库+调试

    java毕业设计流浪猫狗救助网站源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计流浪猫狗救助网站源码+lw文档+mybatis+系统+mysql数据库+调试 本源码技术栈 ...

  5. 猫学习IOS(四)UI半小时就搞定Tom猫

    阿土 首先对影响 下载项目的源材料: Tom猫游戏代码iOS 素材http://blog.csdn.net/u013357243/article/details/44457357 效果图 以前风靡一时 ...

  6. 猫猫学IOS(四)UI之半小时搞定Tom猫

    话不多说 先上效果 项目源码素材下载地址: Tom猫游戏代码iOS 素材http://blog.csdn.net/u013357243/article/details/44457357 效果图 曾经风 ...

  7. 通过开源项目SoundTouch实现类似Tom猫的变声功能

    SoundTouch是一个开源的音频处理库,用于改变音频流或音频文件的节奏.音调和播放速率. 通过调节Tempo.Pitch和Playback Rate可以实现类似Tom猫的变声效果,对于这三个参数官 ...

  8. IOS开发学习之路--第一篇--TOM猫

    当初刚出ipad的时候,tom猫是非常流行的,而如今比这个应用绚丽的软件比比皆是,但是这个是ios编程的基础,所以通过自身的学习来完成一个TOM也是挺有意义的. 项目目的: 1)更好的理解UIButt ...

  9. (素材源代码)猫猫学IOS(四)UI之半小时搞定Tom猫

    下载地址:http://download.csdn.net/detail/u013357243/8514915 以下是执行图片展示 制作思路以及代码解析 猫猫学IOS(四)UI之半小时搞定Tom猫这里 ...

  10. java计算机毕业设计猫咪伤患会诊复查医疗平台源代码+数据库+系统+lw文档

    java计算机毕业设计猫咪伤患会诊复查医疗平台源代码+数据库+系统+lw文档 java计算机毕业设计猫咪伤患会诊复查医疗平台源代码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 开发语 ...

最新文章

  1. 【机器视觉】 dev_set_line_width算子
  2. 解决:如何在Android Studio中找出自己项目文件的所在位置
  3. 浅谈XSS攻击的那些事(附常用绕过姿势)
  4. esp32找不到com端口_玩转GPIO之ESP32点灯大法(MicroPython版)
  5. python 读入图像文件和输出图像文件
  6. 从初级程序员逆袭为技术大牛,你需要懂这 10 项技术!
  7. C#之xml配置文件读写
  8. android中webview使用打开系统相机录像_有没有什么高效使用微信的经验?
  9. 写函数,输入n个数字输出最大值和最小值
  10. Java开发自行车管理项目要求_java毕业设计_springboot框架的公共自行车租赁管理...
  11. php分享网ecshop二次开发视频教程,ecshop二次开发--视频上传
  12. 计算机的发展是小报,电脑小报作品展示评价与交流.ppt
  13. 设置pdf软件同时查看多页PDF
  14. Windows NTSTATUS Values 进程终止消息标识符
  15. PS for Mac 破解版下载
  16. ps4插html屏幕不亮光,万万没想到,居然是这个!PS4黑屏的原因终于找到了!
  17. 企业工商四要素核验是对哪些信息进行验证?
  18. 优化器:torch.optimizer
  19. python提升读取速度_如何提高PySerial读取速度
  20. 大型数据库设计原理实验1

热门文章

  1. G1垃圾回收器-----基本知识及原理解析
  2. Unbuntu ./btest : cannot execute binary file: Exec format error解决方案(CSAPP)
  3. 大学计算机教师招聘试讲什么,应聘高校教师面试,试讲注意事项
  4. eclipse打开中文文件乱码问题
  5. 10种舒服的颜色及配色推荐
  6. c++ cv转化灰度图_OpenCV C++如何使RGB图像变为灰度图像
  7. Netty之线程唤醒wakeup
  8. 红手指云手机屏蔽方案
  9. 程序员的我,为何来了大北京
  10. java贪吃蛇课程设计知乎_Java课程设计---贪吃蛇大作战