用JAVAFX做一个简单的桌面宠物(二)

鼠标点击做出动作(EventListener类)

使用接口EventHandler< MouseEvent>.

类成员及构造函数

	private ImageView imageView;
	int gifID = 0;//图片编号,0为默认图(主图),99为告别图
	int petID = 0;//宠物ID
	double time = 3;//播放动画的时间
	public EventListener(ImageView imgView, int pet) {
		imageView=imgView;
		petID = pet;
	}

处理点击事件

	public void handle(MouseEvent e) {
	if(gifID!=0) return;	//如果动作没做完,就不允许再做新的动作
	double x = e.getX();
	double y = e.getY();
//		System.out.println(x+" "+y);//测试眼睛等部位的位置
	//选择动作
	if(petID == 0) lxhBehavior(x,y);
	else biuBehavior(x,y);
	loadImg(petID,gifID,time);//显示图片
	}

根据点击的位置做出不同的动作

//罗小黑的动作
public void lxhBehavior(double x,double y) {
	//以下的“左”“右”都是相对于用户来说的
	//点击左眼
	if(x>20 & x<42 & y>125 & y<143) {
		gifID = 1;
		time = 2.8;
	}
	//点击右眼
	else if(x>63 & x<90 & y>125 & y<143) {
		gifID = 2;
		time = 3.85;
	}
	//点击右耳
	else if(x>93 & x<110 & y>80 & y<100) {
		gifID = 3;
		time = 6.3;
	}
	//点击身体
	else if(x>110 & x<130 & y>125 & y<155) {
		gifID = 4;
		time = 3;
	}
	//点击小小黑
	else if(x>152 & x<175 & y>157 & y<172) {
		gifID = 5;
		time = 3.5;
	}
	else {
		gifID = 0;
	}
}

//比丢的动作
private void biuBehavior(double x, double y) {
	//以下的“左”“右”都是相对于用户来说的
	//点击左眼
	if(x>40 & x<51 & y>60 & y<67) {
		gifID = 1;
		time = 3.7;
	}
	//点击右眼
	else if(x>87 & x<100 & y>58 & y<69) {
		gifID = 2;
		time = 4.45;
	}
	//点击嘴
	else if(x>62 & x<76 & y>61 & y<69) {
		gifID = 3;
		time = 5.3;
	}
	//点击左手
	else if(x>31 & x<49 & y>87 & y<117) {
		gifID = 4;
		time = 1.75;
	}
	//点击右手
	else if(x>86 & x<107 & y>85 & y<114) {
		gifID = 5;
		time = 4;
	}
	//点击额头
	else if(x>43 & x<94 & y>34 & y<52) {
		gifID = 6;
		time = 1.8;
	}
	//点击肚子
	else if(x>64 & x<79 & y>86 & y<130) {
		gifID = 7;
		time = 4.1;
	}
	else {
		gifID = 0;
	}
}

加载图片

不仅是点击时使用,其他地方也能用的通用函数。

public void loadImg(int petID,int gifID, double time) {
	this.gifID = gifID;
	if(gifID!=0) {
		Image newimage;
		if(petID==0)
			newimage = new Image(this.getClass().getResourceAsStream("/lxh/罗小黑"+gifID+".gif"));
		else 
			newimage = new Image(this.getClass().getResourceAsStream("/biu/biu"+gifID+".gif"));
		
		imageView.setImage(newimage);
		//中断动图的播放,切换至主图
		new Timeline(new KeyFrame(Duration.seconds(time), ae ->mainImg(this.petID,0))).play();
	}
}

加载主图,负责默认状态和退出时的动作

public void mainImg(int pet,int key) {
	Image newimage;
	if(pet==0)
		newimage = new Image(this.getClass().getResourceAsStream("/lxh/罗小黑"+key+".gif"));
	else
		newimage = new Image(this.getClass().getResourceAsStream("/biu/biu"+key+".gif"));
	imageView.setImage(newimage);
	//这里是为了保证能做出新的动作,对应于handle方法的if(gifID!=0) return;
	//同时也是为了做其他动作时不被“自行走动”和“自娱自乐”打断
	if(key == 0) gifID=0;
}

EventListener类完整代码

虽然没有必要,上面都有了,但是方便复制嘛。

public class EventListener implements EventHandler<MouseEvent> {
	private ImageView imageView;
	int gifID = 0;//图片编号
	int petID = 0;//宠物ID
	double time = 3;//播放动画的时间
	public EventListener(ImageView imgView, int pet) {
		imageView=imgView;
		petID = pet;
	}
	public void handle(MouseEvent e) {
		if(gifID!=0) return;	//如果动作没做完,就不允许再做新的动作
		double x = e.getX();
		double y = e.getY();
//		System.out.println(x+" "+y);//测试眼睛等部位的位置
		//选择动作
		if(petID == 0) lxhBehavior(x,y);
		else biuBehavior(x,y);
		loadImg(petID,gifID,time);//显示图片
	}
	//罗小黑的动作
	public void lxhBehavior(double x,double y) {
		//以下的“左”“右”都是相对于用户来说的
		//点击左眼
		if(x>20 & x<42 & y>125 & y<143) {
			gifID = 1;
			time = 2.8;
		}
		//点击右眼
		else if(x>63 & x<90 & y>125 & y<143) {
			gifID = 2;
			time = 3.85;
		}
		//点击右耳
		else if(x>93 & x<110 & y>80 & y<100) {
			gifID = 3;
			time = 6.3;
		}
		//点击身体
		else if(x>110 & x<130 & y>125 & y<155) {
			gifID = 4;
			time = 3;
		}
		//点击小小黑
		else if(x>152 & x<175 & y>157 & y<172) {
			gifID = 5;
			time = 3.5;
		}
		else {
			gifID = 0;
		}
	}
	//比丢的动作
	private void biuBehavior(double x, double y) {
		//以下的“左”“右”都是相对于用户来说的
		//点击左眼
		if(x>40 & x<51 & y>60 & y<67) {
			gifID = 1;
			time = 3.7;
		}
		//点击右眼
		else if(x>87 & x<100 & y>58 & y<69) {
			gifID = 2;
			time = 4.45;
		}
		//点击嘴
		else if(x>62 & x<76 & y>61 & y<69) {
			gifID = 3;
			time = 5.3;
		}
		//点击左手
		else if(x>31 & x<49 & y>87 & y<117) {
			gifID = 4;
			time = 1.75;
		}
		//点击右手
		else if(x>86 & x<107 & y>85 & y<114) {
			gifID = 5;
			time = 4;
		}
		//点击额头
		else if(x>43 & x<94 & y>34 & y<52) {
			gifID = 6;
			time = 1.8;
		}
		//点击肚子
		else if(x>64 & x<79 & y>86 & y<130) {
			gifID = 7;
			time = 4.1;
		}
		else {
			gifID = 0;
		}
	}
	//点击部位后加载图片
	public void loadImg(int petID,int gifID, double time) {
		this.gifID = gifID;
		if(gifID!=0) {
			Image newimage;
			if(petID==0)
				newimage = new Image(this.getClass().getResourceAsStream("/lxh/罗小黑"+gifID+".gif"));
			else 
				newimage = new Image(this.getClass().getResourceAsStream("/biu/biu"+gifID+".gif"));
			
			imageView.setImage(newimage);
			//中断动图的播放,切换至主图
			new Timeline(new KeyFrame(Duration.seconds(time), ae ->mainImg(this.petID,0))).play();
		}
    }
	//主图,负责默认状态和退出时的动作
	public void mainImg(int pet,int key) {
		Image newimage;
		if(pet==0)
			newimage = new Image(this.getClass().getResourceAsStream("/lxh/罗小黑"+key+".gif"));
		else
			newimage = new Image(this.getClass().getResourceAsStream("/biu/biu"+key+".gif"));
		imageView.setImage(newimage);
		//这里是为了保证能做出新的动作,对应于handle方法的if(gifID!=0) return;
		//同时也是为了做其他动作时不被“自行走动”和“自娱自乐”打断
		if(key == 0) gifID=0;
    }
}
使用JavaFX开发电商管理系统时,可以通过以下方式实现钱包余额功能: 1. 用户注册:在用户注册页面中,添加一个钱包余额输入框,当用户填写完其他必填信息后,可以选择输入一个初始的钱包余额。这个初始余额可以是系统预设的默认值,或者由用户自行填写。注册成功后,系统会保存用户的钱包余额信息。 2. 用户登录:在用户登录页面中,显示用户的钱包余额。用户成功登录后,系统会获取该用户的钱包余额并显示在界面上。 3. 购物结算:用户选择商品加入购物车后,进入结算页面。在结算页面中,显示用户的钱包余额和所购商品的总金额。用户可以选择使用钱包余额进行支付,系统会根据用户选择的支付方式计算应支付的金额和钱包余额的扣除情况。 4. 充值功能:用户可以选择充值按钮,进入充值页面。用户在充值页面中填写充值金额,并选择支付方式完成充值操作。充值后,系统会更新用户的钱包余额,并将充值记录保存到数据库中。 5. 提现功能:用户可以选择提现按钮,进入提现页面。用户在提现页面中填写提现金额,并选择提现方式完成提现操作。系统会根据用户的提现金额和提现方式进行相应的处理,并更新用户的钱包余额。 6. 钱包余额变动记录:系统会记录用户钱包余额的变动情况,包括充值、提现和购物结算的扣款记录。用户可以通过查看余额变动记录来了解自己的钱包使用情况。 通过以上方法,可以在电商管理系统中实现钱包余额功能,用户可以方便地查看余额、进行充值提现和使用余额进行购物结算。同时,对于用户的钱包操作,系统也会记录变动情况,以方便用户查看和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值