java swing 画个圆跟随鼠标移动

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Ellipse2D;

import javax.swing.*;
public class TestA extends JFrame{

	panelA panel;
	TestA(){
		super("画个圆跟随鼠标移动");
		setBounds(600, 200, 600, 800);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		panel =new panelA();
		add(panel);
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SwingUtilities.invokeLater(()->{
			new TestA().setVisible(true);
		});
	}
	
	private class panelA extends JPanel{
		Ellipse2D.Double  circle;
		panelA(){
			circle = new Ellipse2D.Double(50, 50, 100, 100);
			addMouseMotionListener(new MouseMotionListener() {
				
				@Override
				public void mouseMoved(MouseEvent e) {
					// TODO Auto-generated method stub
					circle.x = e.getX()-circle.getWidth()/2;
					circle.y = e.getY()-circle.getHeight()/2;
					repaint();
				}
				
				@Override
				public void mouseDragged(MouseEvent e) {
					// TODO Auto-generated method stub
					
				}
			});
		}
		

		@Override
		protected void paintComponent(Graphics g) {
			// TODO Auto-generated method stub
			super.paintComponent(g);
			Graphics2D g2 = (Graphics2D)g;
			g2.setColor(Color.RED);
			g2.fill(circle);
			
		}
	}

}

效果:

  • 当鼠标在窗口内移动时,红色的圆会跟随鼠标移动
  • 圆心始终位于鼠标指针位置
  • 总结

  • Ellipse2D.Double 使用公共字段(xywidthheight)而不是 setter 方法
  • 要修改位置,直接给 circle.x 和 circle.y 赋值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值