Java swing拖拽移动组件.

来源:互联网 发布:在淘宝怎么买电影票 编辑:程序博客网 时间:2024/06/11 14:39

首先构造自己的组件,如..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() {@Overridepublic 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里得到原对象引用即可解决拖拽移动,还可以顺便传递原坐标。

     

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

1 0
原创粉丝点击