`

Java 拖动Swing组件和图片

阅读更多
在Swing中拖动一个组件或者图片,我们抛开定位布局不说,是件很容易的事情。拖动图片和拖动组件是相同的道理,如果您打算拖动一个组件,只要给组件增加两个监听器就可以了。一个是addMouseListener(MouseListener l),另一个是:addMouseMotionListener(MouseMotionListener l) ;由于MouseListener和MouseMotionListener都继承同一个父类EventListener,所以我们给组件增加监听器时,只要增加同一个监听器就可以了。即:
DragPicListener listener = new DragPicListener();
component.addMouseListener(listener);
component.addMouseMotionListener(listener);


对于监听器DragPicListener,我们只要实现鼠标按下时的触发事件public void mousePressed(MouseEvent e);和鼠标拖动时的触发事件:public void mouseDragged(MouseEvent e) ,就可以完成组件的拖动了。当鼠标按下时我们记录下鼠标的位置;当鼠标移动时,获得鼠标当前的位置,并把组件移动到当前位置。监听类程序如下:
class DragPicListener extends MouseInputAdapter {
		/** 坐标点 */
		Point point = new Point(0, 0);

		/**
		 * 当鼠标拖动时触发该事件。 记录下鼠标按下(开始拖动)的位置。
		 */
		public void mouseDragged(MouseEvent e) {
			// 转换坐标系统
			Point newPoint = SwingUtilities.convertPoint(dragPicLabel, e
					.getPoint(), dragPicLabel.getParent());
			// 设置标签的新位置
			dragPicLabel.setLocation(dragPicLabel.getX()
					+ (newPoint.x - point.x), dragPicLabel.getY()
					+ (newPoint.y - point.y));
			// 更改坐标点
			point = newPoint;
		}

		/**
		 * 当鼠标按下时触发该事件。 记录下鼠标按下(开始拖动)的位置。
		 */
		public void mousePressed(MouseEvent e) {
			// 得到当前坐标点
			point = SwingUtilities.convertPoint(dragPicLabel, e.getPoint(),
					dragPicLabel.getParent());
		}
	}

这里还需要解释一下的是:SwingUtilities.convertPoint这个方法,这个方法的原理和作用我单独写了一篇文章:《SwingUtilities.convertPoint 方法的作用》 http://javapub.iteye.com/blog/739146,请大家参考。

附件是一个完整的程序,和一副图片,运行时请将demo.jpg拷贝到C盘根目录,或者修改程序的图片路径。运行效果如下图:
拖动图片前:

拖动图片后:


文章地址:http://javapub.iteye.com/blog/739194

相关文章:wingUtilities.convertPoint 方法的作用:http://javapub.iteye.com/blog/739146
6
0
分享到:
评论
2 楼 javapub 2010-12-23  
lliiqiang 写道
这只是你一厢情愿的想法.事件行为是交叉的,所以对于事件数据要独立隔离处理

能否说的更具体一些
1 楼 lliiqiang 2010-12-21  
这只是你一厢情愿的想法.事件行为是交叉的,所以对于事件数据要独立隔离处理

相关推荐

    java拖拽透明组件源码

    java拖拽透明组件源码 swing 中拖拽

    javaSwing常用的组件

    javaSwing常用的组件,包括树的应用以及下拉列表

    一个java swing 实现的拖拽组件 交换位置的小程序

    一个java swing 实现的拖拽组件 交换位置的小程序

    Java Swing中的可拖动组件

    创建有用的可拖动通用组件以创建自定义图形桌面应用程序,例如可视化编辑器或多媒体管理

    java swing拖放功能

    java swing拖放功能,利用java swing实现java可视组件能够拖放。

    Java实现的可选择及拖拽图片的面板功能【基于swing组件】

    主要介绍了Java实现的可选择及拖拽图片的面板功能,涉及java基于swing组件选择与操作图片元素的相关实现技巧,需要的朋友可以参考下

    跟我学Java面向对象程序设计技术及应用——Java-Swing-GUI组件技术教学参考示例(第2部分).pdf

    杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究, 1/16 页 1.1 Java Swing GUI 组件技术教学参考示例(第 2 部分) 1.1.1 Swing ToolBar 组件的应用实例 1、窗口内的...

    JAva拖动滑块旋转图片.rar

    JAva拖动滑块旋转图片,拖动滑块可改变图片 旋转的角度,可学习下滑块取值赋值的技巧。部分代码如下:  super("图像旋转演示"); //调用父类构造函数  jSlider.setPaintTicks(true); //绘制标志位  jSlider....

    java图书馆swing源码-swing_library:JavaSwing库

    框架缺少的许多高级组件和布局管理器。 特征 可扩展的手风琴 就像在 Outlook 中一样,左侧的滑块可打开和关闭菜单选项 文本区域扩展器: 该组件是一个具有特殊右下角的文本区域。 当用户将鼠标悬停在该角上时,可以...

    webp图片转化程序+swing

    改程序是使用java-swing窗口组件写一个一个根据webp类型的图片转化成png图片的程序,可以拖拽文件到输入框批量生成图片文件, 效率是非常高的图片的清晰度也是非常高的, 当然图片的清晰度取决于你的webp文件, 如果...

    java swing-JSplitPane的使用

    JSplitPane是Swing库提供的一个分割面板组件。它可以在图形界面中创建两个子组件,并允许用户通过拖动分割条来调整子组件的大小。

    java源码包---java 源码 大量 实例

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    JAVA上百实例源码以及开源项目

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    JAVA上百实例源码以及开源项目源代码

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    java源码包4

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    java源码包3

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    Java GUI 学习课程

    Swing是Java最早提供的GUI工具包,它包含了丰富的组件和布局管理器,可以创建复杂的窗口、按钮、文本框、表格等。JavaFX则是Java SE 8之后引入的新一代GUI工具包,它更加现代化和灵活,支持丰富的特效和动画效果。 ...

    java源码包2

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    java图形用户界面用鼠标拖动画图形

    java编写满足以下要求的GUI程序: 在窗口中按下鼠标左键并拖拽,...2.熟练运用Swing常用组件和其API开发GUI程序; 3.理解布局管理器的概念以及常用布局的特点和使用方法; 4.深刻理解并熟练使用AWT事件模型与处理机制。

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...

Global site tag (gtag.js) - Google Analytics