JAVA鼠标屏幕绘制拖拽删除矩形

import java.awt.Cursor;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Point;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionListener;

import java.awt.geom.Point2D;

import java.awt.geom.Rectangle2D;

import java.awt.geom.Rectangle2D.Double;

import java.util.ArrayList;

import javax.swing.JComponent;

public class MouseComponent extends JComponent {

private static final int SIDELENGTH = 10;

private ArrayList<Rectangle2D> squares;

private Rectangle2D current;

public MouseComponent() {

this.squares = new ArrayList<Rectangle2D>();

this.current = null;

this.addMouseListener(new MouseHandle());//监听鼠标点击事件

this.addMouseMotionListener(new MouseMotionHandler());//监听鼠标移动事件

}

//如果鼠标单击屏幕的地方有矩形则不绘制矩形

public Rectangle2D find(Point2D p) {

for (Rectangle2D r : squares) {

if (r.contains(p))

return r;

}

return null;

}

//绘制矩形

public void paintComponent(Graphics g) {

Graphics2D g2 = (Graphics2D) g;

for (Rectangle2D r : squares) {

g2.draw(r);

}

}

//添加矩形到屏幕

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();

}

//删除矩形

public void remove(Rectangle2D s) {

if (s == null)

return;

if (s == current)

current = null;

squares.remove(s);

repaint();

}

private class MouseHandle extends MouseAdapter {

@Override

public void mouseClicked(MouseEvent e) {

current = find(e.getPoint());

//当前位置如果有矩形,且点击大于2次,则删除矩形

if (current != null && e.getClickCount() >= 2)

remove(current);

}

@Override

public void mousePressed(MouseEvent e) {

current = find(e.getPoint());

//当前位置没有矩形则绘制

if (current == null)

add(e.getPoint());

}

}

private class MouseMotionHandler implements MouseMotionListener {

@Override

public void mouseDragged(MouseEvent e) {

//如果当前位置有矩形,进行拖拽。

if (current != null) {

int x = e.getX();

int y = e.getY();

current.setFrame(x - SIDELENGTH / 2, y - SIDELENGTH / 2,

SIDELENGTH, SIDELENGTH);

repaint();

}

}

@Override

public void mouseMoved(MouseEvent e) {

//鼠标在空白屏幕默认箭头

if(find(e.getPoint())==null)setCursor(Cursor.getDefaultCursor());

//碰到矩形区域区域变成十字架

else setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));

}

}

}

JAVA鼠标屏幕绘制拖拽删除矩形

时间: 2024-10-28 04:38:14

JAVA鼠标屏幕绘制拖拽删除矩形的相关文章

UI--学习模仿QQ未读提醒拖拽删除

<代码里的世界> -UI篇 用文字札记描绘自己 android学习之路 转载请保留出处 by Qiao http://blog.csdn.net/qiaoidea/article/details/46608385 [导航] 弹出式对话框各种方案 从仿QQ消息提示框来谈弹出式对话框的实现方式 (Dialog,PopupWind,自定义View,Activity,FragmentDialog) Dialog源码解析 从源码上看Dialog与DialogFragment 仿IOS ActionShe

H5的拖放事件(拖拽删除)

今天我们来介绍一下h5的拖放事件: 拖放事件 H5的拖放事件提供了多个接口: 1.drag:当元素或者选中的文本被拖动时触发(每几百毫秒触发一次),应用在被拖拽元素上 2.dragend:当拖动操作结束时触发(通过释放鼠标按钮或者点击转义键),应用在被拖拽元素上 3.dragenter:当一个被拖动的元素或者选中的文本进入一个有效的放置目标时触发,应用在目标元素上 4.dragexit:当元素不再是拖动操作的直接选择元素时触发(很少使用) 5.dragleave:当拖动元素或者选中的文本离开有效

JS 鼠标事件练习—拖拽效果

拖拽效果 HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>拖拽效果</title> <link rel="stylesheet" type="text/css" href="拖拽效果.css"> </head> <body> <div

支持谷歌浏览器下鼠标拖动和拖拽的鼠标指针特效

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档——石家庄玻璃隔断厂家|石家庄感应门</title> <style>

鼠标拖拽移动Java界面组件

默认的,Frame或者JFrame自身已经实现了鼠标拖拽标题栏移动窗口的功能. 只是,当你不满意java的JFrame样式,隐藏了标题栏和边框,又或者干脆直接使用JWindow,那你又该怎么实现鼠标拖拽移动窗口的目的呢?最开始,我简单的在mouseDragged方法里frame.setLocation(e.getX(), e.getY()),结果,frame拖拽的时候不停地闪烁,位置在屏幕上不断跳动.后来网上查资料,找到了答案. 这里给一个简单的示例,一看就明白: 1 package com.j

Atitit。D&amp;D drag&amp;drop拖拽功能c#.net java swing的对比与实现总结

Atitit.D&D drag&drop拖拽功能c#.net java swing的对比与实现总结 1. 实现一个D&D操作一般包括三个步骤: 1 2. .net黑头的拖曳机制.必须有DragEnter事件(单独写DragDrop事件是不会具有拖拽功能的) 2 3. ---java黑头的拖曳..必须有DragEnter事件(单独写 Drop事件是不会具有拖拽功能的) 2 4. 代码 3 5. 参考 5 1. 实现一个D&D操作一般包括三个步骤: 首先实现一个拖拽源,这个拖拽

03JavaScript程序设计修炼之道_2019-07-02_21-47-36_ 鼠标弹起拖拽、放大镜、mouseenter&amp;mouseleave、

26drag.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatib

完美拖拽 &amp;&amp;仿腾讯微博效果&amp;&amp; 自定义多级右键菜单

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

拖拽效果的实现原理分析2

拖拽效果的实现原理分析2 上文对html5支持的浏览器的拖拽效果进行了分析,本文不采用任何库,来分析下拖拽的过程 先想想我们平时拖拽是怎么操作的,大致可以分为几下几个步骤: 鼠标按下,鼠标移动,拖拽,被拖动的物件跟着走 鼠标松开,物件停止,无拖动了 计算距离,拖拽的距离(鼠标移动) 对应在事件上就是 onmousedown,onmousemove ,开始拖拽 onmouseup ,停止拖拽 计算相对的拖拽距离 下面我们按照这种思路,写一个拖拽效果,假设我们拖动标题,这块的内容就跟着走. 首先我们