class MouseComponent extends JComponent {
public MouseComponent() {
squares = new ArrayList<Rectangle2D>();
current = null;
this.addMouseListener(new MouseHandler());
this.addMouseMotionListener(new MouseMotionHandler());
}
@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
for(Rectangle2D r : squares) {
g2.draw(r);
}
}
/**
* 点击的这个点,是否在某个图形内
* @param p 点击的点
* @return 在图形内,返回这个图形。不在图形内,返回null。
*/
public Rectangle2D find(Point2D p) {
for(Rectangle2D r : squares) {
if(r.contains(p)) {
return r;
}
}
return null;
}
/**
* 将这个点的图形添加到list中,并重新绘制图形
* @param p 要添加的点
*/
public void add(Point2D p) {
double x = p.getX();
double y = p.getY();
current = new Rectangle2D.Double(x - SIDELENGTH / 2, y - SIDELENGTH / 2, SIDELENGTH, SIDELENGTH);
squares.add(current);
repaint();
}
/**
* 从list中移除图形
* @param s 要移除的图形
*/
public void remove(Rectangle2D s) {
if(s == null) {
return;
}
//将当前的置为null
if(s == current) {
current = null;
}
squares.remove(s);
repaint();
}
private static final int SIDELENGTH = 10;
private Rectangle2D current;
private ArrayList<Rectangle2D> squares;
}
本文介绍了一个基于Java Swing的自定义图形组件MouseComponent。该组件可以响应鼠标事件,在画布上绘制矩形并实现图形的选择与删除。通过监听鼠标点击和移动事件,能够动态地在界面上创建和管理多个矩形。
17万+

被折叠的 条评论
为什么被折叠?



