Java swing拖拽移动组件.

首先构造自己的组件,如..Component extends JComponents { ... }。在里面添加拖拽方法

DragSource dragSource = DragSource.getDefaultDragSource();
dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_MOVE, new DragGestureListener() {
	...
}

在父容易里,如..Panel extends JPanel { ...} 添加拖拽实现。

new DropTarget(this, DnDConstants.ACTION_MOVE,  new DropTargetAdapter() {
	@Override
	public void drop(DropTargetDropEvent dtde) {
		...
	}
}


最后还有一个...Transferable implements Transferable { ..}

如果在...Transferable里传递..Component对象,在..Panel的drop方法里取得..Component后,调用..Component.setLocation是不能移动组件的。原因是拖拽会将...Transferable从新序列化,得到一个新的..Component组件,因为..Component继承了Component,而在Component里的parent是transient,所以拖拽后,新..Component和..Panel容器不会产生关联,setLocation方法不起作用。

所以只要在..Transferable里传递一些标识性,drop里得到原对象引用即可解决拖拽移动,还可以顺便传递原坐标。

     

左图中,右下移动过程中有一个鼠标的拖拽光标,右图为移动完成后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值