畅享博客 > 电力信息化 > [转帖]JTree之间的drag/_drop 
2007-5-11 16:37:37

[转帖]JTree之间的drag/_drop 

JTree之间的drag/_drop  版 本 
代码分类 APPLICATION
整理日期 2003-07-20 19:35:05 
文件大小 2 KB
代码作者 (不详) 
下载次数 819
代码内容 关于JTree 之间的drag/_drop一直找不到合适的方法。现通过鼠标事件的相应实现了该过程。希望和大家一起学习。

源码如下:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import javax.swing.tree.*;


public class Drag_dropTree implements MouseMotionListener,MouseListener, DragGestureListener,DragSourceListener
{


private JTree tree1=null;
private JTree tree2=null;
Object lastNode;
Vector vet=new Vector();
TreeselectionModel selectionModel=tree1.getselectionModel();
Vector vetnew=new Vector();
private boolean drag=false;

public Drag_dropTree(JTree t1,JTree t2)
{
tree1=t1;
tree2=t2;
DragSource dragSource = DragSource.getDefaultDragSource();
dragSource.createDefaultDragGestureRecognizer(
tree1, // component where drag originates
DnDConstants.ACTION_COPY_OR_MOVE, // actions
this); // drag gesture recognizer
dragSource.createDefaultDragGestureRecognizer(
tree2, // component where drag originates
DnDConstants.ACTION_COPY_OR_MOVE, // actions
this); // drag gesture recognizer
tree1.addMouseMotionListener(this);
tree1.addMouseListener(this);
tree2.addMouseMotionListener(this);
tree2.addMouseListener(this);
}

 


public void mouseEntered(MouseEvent e)
{

JTree selecttree=(JTree)e.getSource();
TreePath path=selecttree.getPathForLocation(e.getX(), e.getY());
if(path!=null)
{
if(drag&vet!=null)
{
drag=false;
String str=path.getPathComponent(1).toString();

MutableTreeNode parent,node=(MutableTreeNode)path.getLastPathComponent();
if(node.isLeaf())
parent=(MutableTreeNode)node.getParent();
else
parent=node;
int index=parent.getIndex(node)+1;
System.out.println("now node is in "+index+"level");

DefaultTreeModel model=(DefaultTreeModel)tree2.getModel();

int j=0;
while(j<vet.size())
{
String ss=vet.elementAt(j).toString();
MutableTreeNode newnode=new DefaultMutableTreeNode(ss);
model._insertNodeInto(newnode,parent,index);
j++;
}
vet=null;
vet=new Vector();
}
else;

}
else;

 

}

 

public void mouseDragged(MouseEvent e){
drag=true;
if(selectionModel!=null)selectionModel.clearselection();

}

 

public void mouseMoved(MouseEvent e){}

public void mouseClicked(MouseEvent e){}

public void mouseExited(MouseEvent e){}

public void mousePressed(MouseEvent e)
{

lastNode=null;
if(e.getClickCount()==1)
{
TreePath path=tree1.getPathForLocation(e.getX(), e.getY());

if(path!=null){
TreeNode node=(TreeNode)path.getLastPathComponent();
if(node.isLeaf())
{
lastNode=(MutableTreeNode)path.getLastPathComponent();
TreeselectionModel selectionModel=tree1.getselectionModel();
int a=selectionModel.getselectionCount();
System.out.println("node is :"+a);
if(a>1)
{

if(vetnew!=null){
System.out.println(vetnew.size()+"have so much path");
for(int n=0;n<vetnew.size();n++)
{
TreePath p=(TreePath)vetnew.get(n);
System.out.println(p);
if(p==path)path=null;
}
}
if(path!=null)

{
vet.addElement(lastNode);
vetnew.addElement(path);
}
}
else
{
if(vet!=null)
{
vet.removeAllElements();
vet.addElement(lastNode);
}
if(vetnew!=null)
{
vetnew.removeAllElements();
vetnew.addElement(path);
}
}


}
else
JOptionPane.showMessageDialog(this,"please select a leaf node!");
}
}


}
public void mouseReleased(MouseEvent e){}


public void dragGestureRecognized(DragGestureEvent e) {
// drag anything ...
e.startDrag(DragSource.DefaultCopy_drop, // cursor
new Stringselection("drag well"), // transferable
this); // drag source listener
drag=true;
}
public void drag_dropEnd(DragSource_dropEvent e) {}
public void dragEnter(DragSourceDragEvent e) {}
public void dragExit(DragSourceEvent e) {}
public void dragOver(DragSourceDragEvent e) {}
public void _dropActionChanged(DragSourceDragEvent e) {}
}
 
代码下载


推荐到鲜果: 查阅更多相关主题的帖子: ERP ERP技术

评论

呵呵,栏目放错了

发布者 albert
2007-5-11 19:48:50


您正在以 匿名用户 的身份发表评论  快速登录
(不得超过 50 个汉字)
       看不清,换一个
提示消息
(输入完内容可以直接按Ctrl+Enter提交)