`

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环境中创建一个可拖动的透明组件。 拖拽功能在Java中可以通过实现`TransferHandler`类和使用`MouseListener`与`MouseMotionListener`接口来完成。`...

    javaSwing常用的组件

    Java Swing 是 Java GUI(图形用户界面)开发中的一个重要部分,它是AWT(Abstract Window Toolkit)的扩展,提供了更丰富的...同时,Swing 还支持自定义组件和外观,这使得Java Swing成为Java桌面应用开发的强大工具。

    Java Swing中的可拖动组件

    在Swing中实现可拖动组件是创建交互式和直观应用程序的关键技术之一,尤其适用于开发像可视化编辑器或多媒体管理器这样的应用。下面将详细介绍Java Swing中的可拖动组件以及如何实现它们。 1. **可拖动组件的基本...

    java swing漂亮界面 超酷 javaswing教程

    Swing组件包括按钮(JButton)、文本框(JTextField)、面板(JPanel)、滚动窗格(JScrollPane)、菜单(JMenu)以及对话框(JOptionPane)等。 在创建漂亮的Java Swing界面时,有几个关键知识点需要掌握: 1. **...

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

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

    swing组件透明拖动

    总的来说,Swing组件的透明拖动是通过设置组件的透明度和添加适当的鼠标监听器来实现的。这不仅提高了用户界面的视觉吸引力,还增强了用户体验。在实际项目中,开发者可以根据需求灵活调整透明度、拖动行为以及其他...

    Java swing鼠标拖拽功能源码

    本源码着重于如何在Swing组件上实现鼠标拖放操作,这对于创建自定义组件或增强已有组件的行为至关重要。 首先,Java中的鼠标事件主要包括`MouseListener`和`MouseMotionListener`接口。`MouseListener`提供了`...

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

    Java 实现的可选择及拖拽图片的面板功能基于 Swing 组件 Java 实现的可选择及拖拽图片的面板功能基于 Swing 组件是Java语言中的一种常见的图形用户界面(GUI)实现方式。该功能实现了在 Swing 组件中的图片选择和...

    Swing组件下载(常用组件)

    Swing是Java编程语言中...以上就是Swing组件的一些核心功能和用法,它们共同构成了Swing组件体系,为开发复杂的Java桌面应用提供了强大的支持。通过灵活组合和定制这些组件,开发者可以创建出满足各种需求的用户界面。

    使用java swing和jdbc完成的餐饮管理系统。并且实现了餐桌拖拽的功能。能基本满足一般餐饮的使用

    首先,Java Swing是Java AWT(Abstract Window Toolkit)的扩展,提供了更多的GUI(图形用户界面)组件和功能。Swing组件包括按钮、文本框、菜单、表格等,它们都是轻量级的,可以在没有操作系统支持的情况下运行。...

    java_picture.zip_JAVA 图片浏览_java swing picture_java 图片_java_pictu

    图片的浏览可能涉及到`JFrame`作为主窗口,`JLabel`或`JScrollPane`来展示图片,以及`MouseListener`和`MouseMotionListener`监听用户的点击和拖动事件,以实现图片的缩放、平移等操作。 描述中提到的"直接运行即可...

    Java项目:日历万年历(java+swing)

    2. **Swing组件**: - **JFrame**:作为应用程序的主窗口,展示万年历的界面。 - **JPanel**:用于组织和分组其他组件,如用于显示月份的面板。 - **JButton**:用户交互元素,如切换年份、月份的按钮。 - **...

    java swing控件的drag和drop的实现方法

    总结来说,Java Swing中的拖放功能涉及多个组件和接口的协同工作,通过创建`DragSource`和`DropTarget`,注册监听器,并定义数据传输方式,我们可以实现丰富的用户交互体验。实际项目中,你可能需要根据具体需求对...

    java+swing+画图板Java实用源码整理learns

    Swing是Java AWT(Abstract Window Toolkit)的扩展,提供了更丰富的组件和更现代的外观,适用于桌面应用程序开发。 首先,让我们深入了解一下Swing中的图形绘制。在Swing中,我们可以利用`JPanel`或`JComponent`...

    Swing组件的DnD拖拽深度分析

    Swing组件的拖放(Drag and Drop, DnD)功能是Java GUI编程中的一个重要特性,它允许用户通过直观的拖动操作在组件之间传递数据。深入理解Swing的DnD机制对于创建用户友好、交互性强的应用程序至关重要。本文将详细...

    Java软件开发实战 Java基础与案例开发详解 14-5 可视化开发swing组件 共10页.pdf

    MyEclipse 7.5新增的可视化开发Swing组件功能,使得开发者可以通过直观的拖拽操作来创建和编辑Swing组件,极大地提高了开发效率。 ### 14.5.2 创建Swing组件的具体操作步骤 1. **创建Swing组件**: - 在项目名上...

    java swing 表头不可拖动

    对于初学者来说,理解Swing组件的内部工作原理,特别是自定义组件和事件处理,是一项重要的技能。在实际项目中,根据需求选择合适的方法来禁用JTable的列头拖动,不仅可以提高用户体验,也可以更好地控制数据的呈现...

    java实现在JFrame窗口进行图片拖拽

    在Java编程环境中,实现图片在JFrame...总的来说,实现这个功能需要对Java Swing组件、事件处理和数据传输有深入理解,同时具备一定的GUI设计经验。通过实践和不断优化,你可以创建出高效、用户友好的图片拖放功能。

    基于Swing的图片浏览器源代码

    基于Swing的图片浏览器源代码是一个典型的案例,展示了如何利用Swing组件来创建一个能够浏览和操作图像的应用程序。在这个案例中,我们将深入探讨Swing的基本概念、组件使用以及如何实现图片的加载和展示。 1. **...

Global site tag (gtag.js) - Google Analytics