java实现鼠标拖放功能代码实例
利用鼠标的拖放来交换程序的数据,即所谓的鼠标拖放功能。鼠标的拖放功能在图形化系统中非常常用,Java 提供了java.awt.dnd 和java.awt.datatransfer 包来支持该功能。本例将演示如何在程序中实现拖放,当在窗口上部的“Hello World!”标签点下鼠标,并拖至窗口下部的文本框放开,则在文本框中将添加“Hello World !”文本;继续上述过程,将继续添加该文本。
具体的实现思路和方法:在鼠标拖放的实现中,两个最重要的概念是拖拽源和放置目标,即drag source 和drop target。拖拽源和放置目标都是与可视化的组件相关联的(如果不可视,还怎么拖呢?!)。拖放技术的实质就是将拖拽源组件上的数据传递到放置目标组件上,因此从底层看,拖放和上例中的剪贴板技术很接近。
拖拽源的实现:拖拽源类必须先创建一个DragGestureRecognizer 实例,表明该类是拖拽源组件类或包含拖拽源组件。可以通过调用DataSource 对象的createDefaultDragGestureRecognizer方法实现。具体的实现如下:
int action = DnDConstants.ACTION_COPY_OR_MOVE; //拖放的类型
ds.createDefaultDragGestureRecognizer(this,action,this);
上面的语句表明, 拖拽源组件是本类自身的实例对象, 要完成的拖放的种类是DnDConstants.ACTION_COPY_OR_MOVE 型的,实现DragGestureListener 接口的类是本类。拖拽源一般实现DragGestureListener 接口,该接口中定义了一个dragGestureRecognized方法,当开始拖拽是,DragGestureListener 监听到事件,随即转入dragGestureRecognized()方法处理事件,如将拖拽源的数据发送出去。具体代码:
public void dragGestureRecognized(DragGestureEvent dge) {
//throw new java.lang.UnsupportedOperationException("Method dragGestureRecognized not yet implemented.");
try{
Transferable tr = new StringSelection(this.getText); //将标签的文本作为数据,由Transferable 对象包装
//开始拖拽,设置光标为DragSource.DefaultCopyNoDrop 形,拖放的数据是tr 对象,DragSourceListene