importjava.awt.*;importjava.awt.datatransfer.*;importjava.awt.event.*;importjava.io.*;importjavax.swing.*;importjavax.swing.tree.*;publicclassTestDrapDrop
{publicstaticvoidmain(String args[])
{
JFrame f=newJFrame("拖放测试" );
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel top=newJPanel(newBorderLayout());
JLabel dragLabel=new JLabel("拖我:");
JTextField text=newJTextField();
text.setDragEnabled(true);
top.add(dragLabel, BorderLayout.WEST);
top.add(text, BorderLayout.CENTER);
f.add(top, BorderLayout.NORTH);finalJTree tree=newJTree();finalDefaultTreeModel model=(DefaultTreeModel) tree.getModel();
tree.setTransferHandler(newTransferHandler()
{publicbooleancanImport (TransferHandler.TransferSupport support)
{if(!support.isDataFlavorSupported (DataFlavor.stringFlavor)||!support.isDrop())
{returnfalse;
}
JTree.DropLocation dropLocation=(JTree.DropLocation) suppor
.getDropLocat ion();returndropLocation.getPath()!=null;
}publicbooleanimportData (TransferHandler.TransferSupport support)
{if(!canImport(support))
{returnfalse;
}
JTree.DropLocation dropLocation=(JTree.DropLocation) support
.getDropLocat ion();
TreePath path=dropLocation.getPath();
Transferable transferable=support.getTransferable();
String transferData;try{
transferData=(String) transferable
& nbsp; .getTransferData(DataFlavor.stringFlavor);
}catch(IOException e)
{returnfalse;
}catch(UnsupportedFlavorException e)
{returnfalse;
}intchildIndex=dropLocation.getChildIndex();if(childIndex==-1)
{
childIndex=model.getChildCount(path
& nbsp; .getLastPathComponent());
}
DefaultMutableTreeNode newNode=newDefaultMutableTreeNode(
transferData) ;
DefaultMutableTreeNode parentNode=(DefaultMutableTreeNode) path
.getLastPathC omponent();
model.insertNodeInto (newNode, parentNode, childIndex);
TreePath newPath=path.pathByAddingChild(newNode);
tree.makeVisible(newPath);
tree.scrollRectToVisible(tree.getPathBounds(newPath));returntrue;
}
});
JScrollPane pane=newJScrollPane(tree);
f.add(pane, BorderLayout.CENTER);
JPanel bottom=newJPanel();
JLabel comboLabel=newJLabel("DropMode");
String options[]={"USE_SELECTION","ON","INSERT","ON_OR_INSERT"};finalDropMode mode[]={ DropMode.USE_SELECTION, DropMode.ON, DropMode.INSERT,
DropMode.ON_OR_INSERT };finalJComboBox combo=newJComboBox(options);
combo.addActionListener(newActionListener()
{publicvoidactionPerformed(ActionEvent e)
{intselectedIndex=combo.getSelectedIndex();
tree.setDropMode(mode[selectedIndex]);
}
});
bottom.add(comboLabel);
bottom.add(combo);
f.add(bottom, BorderLayout.SOUTH);
f.setSize(300,400);
f.setVisible(true);
}
}