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 使用公共字段(x, y, width, height)而不是 setter 方法- 要修改位置,直接给
circle.x 和 circle.y 赋值