JAVA界面探讨:1.图片随鼠标移动(将鼠标样式变成自己选定的图片)

JAVA可视开发里,将鼠标样式变成自己选定图片并且不超出边界的方法

import java.awt.*;
import java.awt.event.*;
import java.awt.image.MemoryImageSource;
import javax.swing.*;



public class GameMouseMove extends JPanel implements MouseMotionListener{
	ImageIcon role = new ImageIcon("图片绝对路径.png");
	int roleX=500;//定义图片一开始出现在视图中的X坐标
	int roleY=500;//定义图片一开始出现在视图中的Y坐标
	int newroleX = roleX;//移动后新鼠标在视图中的X坐标位置(在下方的paint方法里将鼠标置于图片中央)
	int newroleY = roleY;
	int roleWidth =62;//定义图片的宽
	int roleHeight = 40;//定义图片的高
	
	public void paint(Graphics g) {             //画图

		//hidemouse();                              //隐藏鼠标方法
		super.paint(g);
		//g.drawLine(roleNX,roleNY,roleX,roleY );
		g.drawImage(role.getImage(),roleX,roleY,roleWidth,roleHeight,null);
		//g.drawString("我被烦死了",roleX,roleY);
			                        }

	
    public void mouseDragged(MouseEvent e) {        //鼠标点击监听器
    	
    	newroleX = e.getX()-roleWidth/2;               //判断图片移动范围,将鼠标置于图片中央
    	newroleY = e.getY()-roleHeight/2;
    	
    	//System.out.println("移动触发"+e.getX()+","+e.getY()+","+newroleX+","+newroleY);
    	//1500和900为视图的高和宽
    	if((newroleX+roleWidth>1500)&&(newroleY+roleHeight>900))     //判断右下角
    	{/*X,Y值不做改变*/}
    	
    	else if((newroleX<0)&&(newroleY<0))                            //判断左上角
    	{/*X,Y值不做改变*/}
    	
    	else if((newroleX+roleWidth>1500)&&(newroleY<0))             //判断右上角
    	{/*X,Y值不做改变*/}
    	
    	else if((newroleY+roleHeight>900)&&(newroleX<0))             //判断左下角
    	{/*X,Y值不做改变*/}
    	
    	else if((newroleX+roleWidth>1500)           //判断左边缘和右边缘
    			||
    	        (newroleX<0)) {
    		roleY = newroleY;
    	    repaint();
    	                      }
    	        
    	else if((newroleY+roleHeight>900)       //判断上边缘和下边缘
    	    	||
    	         (newroleY<0)){
    		roleX = newroleX;
    		repaint();
    	                                      }
    	else {                                     //未超范围值不变
    		roleX = newroleX;
    		roleY = newroleY;
    		repaint();
    	     }   
    	                                   }
    
    public void mouseMoved(MouseEvent e) {        //鼠标移动监听器
    	   	                                              //以下判断同上
    	newroleX = e.getX()-roleWidth/2;
    	newroleY = e.getY()-roleHeight/2;
    	
    	//System.out.println("移动触发"+e.getX()+","+e.getY()+","+newroleX+","+newroleY);
    	
    	if((newroleX+roleWidth>1500)&&(newroleY+roleHeight>900))
    	{/*X,Y值不做改变*/}
    	
    	else if((newroleX<0)&&(newroleY<0))
    	{/*X,Y值不做改变*/}
    	
    	else if((newroleX+roleWidth>1500)&&(newroleY<0))
    	{/*X,Y值不做改变*/}
    	
    	else if((newroleY+roleHeight>900)&&(newroleX<0))
    	{/*X,Y值不做改变*/}
    	
    	else if((newroleX+roleWidth>1500)
    			||
    			(newroleX<0)) {
    		roleY = newroleY;
    	    repaint();
    	                      }
    	        
    	else if((newroleY+roleHeight>900)
    	    	||
    	        (newroleY<0)){
    		roleX = newroleX;
    		repaint();
    	                                      }
    	else {
    		roleX = newroleX;
    		roleY = newroleY;
    		repaint();
    	     }                                                
                                          }
}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倚肆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值