# 1
Hi!
Here it goes ...
HIH
It's a DnD example ...
import java.awt.Component;
import java.util.Hashtable;
import javax.swing.*;
import javax.swing.tree.*;
public class CustomCellRenderer
implements ListCellRenderer, TreeCellRenderer {
DefaultListCellRenderer listCellRenderer = new DefaultListCellRenderer();
DefaultTreeCellRenderer treeCellRenderer = new DefaultTreeCellRenderer();
public Component getListCellRendererComponent (JList list, Object value,
int index, boolean selected, boolean hasFocus) {
listCellRenderer.getListCellRendererComponent(list, value, index, selected,
hasFocus);
listCellRenderer.setText(getValueString(value));
return listCellRenderer;
}
public Component getTreeCellRendererComponent (JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
treeCellRenderer.getTreeCellRendererComponent(tree, value, selected,
expanded, leaf, row, hasFocus);
if (value instanceof DefaultMutableTreeNode) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
value = node.getUserObject();
}
treeCellRenderer.setText(getValueString(value));
return treeCellRenderer;
}
private String getValueString (Object value) {
String returnString = "null";
if (value != null) {
if (value instanceof Hashtable) {
Hashtable h = (Hashtable)value;
String name = (String)h.get("name");
String url = (String)h.get("url");
returnString = name + " ==> " + url;
}
else {
returnString = "X: " + value.toString();
}
}
return returnString;
}
}
-
import javax.swing.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.dnd.*;
import java.io.IOException;
public class DraggableTree extends JTree
implements DragGestureListener {
DragSource dragSource = DragSource.getDefaultDragSource();
final static DragSourceListener dragSourceListener = new MyDragSourceListener();
static class MyDragSourceListener
implements DragSourceListener {
public void dragDropEnd (DragSourceDropEvent DragSourceDropEvent) {}
public void dragEnter (DragSourceDragEvent DragSourceDragEvent) {}
public void dragExit (DragSourceEvent DragSourceEvent) {}
public void dragOver (DragSourceDragEvent DragSourceDragEvent) {}
public void dropActionChanged (DragSourceDragEvent DragSourceDragEvent) {}
}
public DraggableTree () {
dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE,
this);
}
public DraggableTree (TreeModel model) {
super(model);
dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE,
this);
}
// DragGestureListener
public void dragGestureRecognized (DragGestureEvent dragGestureEvent) {
TreePath path = getSelectionPath();
if (path == null) {
// Nothing selected, nothing to drag
System.out.println("Nothing selected - beep");
getToolkit().beep();
}
else {
DefaultMutableTreeNode selection = (DefaultMutableTreeNode)path.getLastPathComponent();
TransferableTreeNode node = new TransferableTreeNode(selection);
dragSource.startDrag(dragGestureEvent, DragSource.DefaultCopyDrop,
node, dragSourceListener);
}
}
}
import java.awt.*;
import java.awt.dnd.*;
import java.awt.datatransfer.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
import java.util.List;
public class DroppableList extends JList
implements DropTargetListener {
DropTarget dropTarget;
public DroppableList () {
dropTarget = new DropTarget(this, this);
setModel(new DefaultListModel());
}
public void dragEnter (DropTargetDragEvent dropTargetDragEvent) {
dropTargetDragEvent.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
}
public void dragExit (DropTargetEvent dropTargetEvent) {}
public void dragOver (DropTargetDragEvent dropTargetDragEvent) {}
public void dropActionChanged (DropTargetDragEvent dropTargetDragEvent) {}
public synchronized void drop (DropTargetDropEvent dropTargetDropEvent) {
try {
Transferable tr = dropTargetDropEvent.getTransferable();
if (tr.isDataFlavorSupported(TransferableTreeNode.DEFAULT_MUTABLE_TREENODE_FLAVOR)) {
dropTargetDropEvent.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
Object userObject = tr.getTransferData(TransferableTreeNode.DEFAULT_MUTABLE_TREENODE_FLAVOR);
((DefaultListModel)getModel()).addElement(userObject);
dropTargetDropEvent.getDropTargetContext().dropComplete(true);
}
else if (tr.isDataFlavorSupported(DataFlavor.stringFlavor)) {
dropTargetDropEvent.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
String string = (String)tr.getTransferData(DataFlavor.stringFlavor);
((DefaultListModel)getModel()).addElement(string);
dropTargetDropEvent.getDropTargetContext().dropComplete(true);
}
else if (tr.isDataFlavorSupported(DataFlavor.plainTextFlavor)) {
dropTargetDropEvent.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
Object stream = tr.getTransferData(DataFlavor.plainTextFlavor);
if (stream instanceof InputStream) {
InputStreamReader isr = new InputStreamReader((InputStream)stream);
BufferedReader reader = new BufferedReader(isr);
String line;
while ((line = reader.readLine()) != null) {
((DefaultListModel)getModel()).addElement(line);
}
dropTargetDropEvent.getDropTargetContext().dropComplete(true);
}
else if (stream instanceof Reader) {
BufferedReader reader = new BufferedReader((Reader)stream);
String line;
while ((line = reader.readLine()) != null) {
((DefaultListModel)getModel()).addElement(line);
}
dropTargetDropEvent.getDropTargetContext().dropComplete(true);
}
else {
System.err.println("Unknown type: " + stream.getClass());
dropTargetDropEvent.rejectDrop();
}
}
else if (tr.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
dropTargetDropEvent.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
List fileList = (List)tr.getTransferData(DataFlavor.javaFileListFlavor);
Iterator iterator = fileList.iterator();
while (iterator.hasNext()) {
File file = (File)iterator.next();
Hashtable hashtable = new Hashtable();
hashtable.put("name", file.getName());
hashtable.put("url", file.toURL().toString());
((DefaultListModel)getModel()).addElement(hashtable);
}
dropTargetDropEvent.getDropTargetContext().dropComplete(true);
}
else {
System.err.println("Rejected");
dropTargetDropEvent.rejectDrop();
}
} catch (IOException io) {
io.printStackTrace();
dropTargetDropEvent.rejectDrop();
} catch (UnsupportedFlavorException ufe) {
ufe.printStackTrace();
dropTargetDropEvent.rejectDrop();
}
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
import java.util.Hashtable;
public class TreeTester {
public static void main (String args[]) {
JFrame f = new JFrame("Tree Dragging Tester");
CustomCellRenderer renderer = new CustomCellRenderer();
DraggableTree tree = new DraggableTree();
tree.setModel(getDefaultTreeModel());
tree.setCellRenderer(renderer);
JScrollPane leftPane = new JScrollPane(tree);
DroppableList list = new DroppableList();
list.setCellRenderer(renderer);
JScrollPane rightPane = new JScrollPane(list);
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
leftPane, rightPane);
f.getContentPane().add(splitPane, BorderLayout.CENTER);
f.setSize(400, 300);
f.addWindowListener(
new WindowAdapter() {
public void windowClosing (WindowEvent e) {
System.exit(0);
}
}
);
f.setVisible(true);
}
private static TreeModel getDefaultTreeModel () {
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Drag Me");
DefaultMutableTreeNode parent;
parent = new DefaultMutableTreeNode("Auctions");
root.add(parent);
parent.add(new DefaultMutableTreeNode(makeNode("eBay", "http://www.ebay.com")));
parent.add(new DefaultMutableTreeNode(makeNode("EggHead", "http://www.egghead.com")));
parent.add(new DefaultMutableTreeNode(makeNode("First Auction", "http://www.firstauction.com")));
parent.add(new DefaultMutableTreeNode(makeNode("uBid", "http://www.ubid.com")));
parent = new DefaultMutableTreeNode("Search Engines");
root.add(parent);
parent.add(new DefaultMutableTreeNode(makeNode("HotBot", "http://www.hotbot.com")));
parent.add(new DefaultMutableTreeNode(makeNode("Infoseek", "http://www.infoseek.com")));
parent.add(new DefaultMutableTreeNode(makeNode("Lycos", "http://www.lycos.com")));
parent.add(new DefaultMutableTreeNode(makeNode("Yahoo", "http://www.yahoo.com")));
parent = new DefaultMutableTreeNode("Java");
root.add(parent);
parent.add(new DefaultMutableTreeNode(makeNode("Focus on Java", "http://java.about.com")));
parent.add(new DefaultMutableTreeNode(makeNode("JavaWorld", "http://www.javaworld.com")));
parent.add(new DefaultMutableTreeNode(makeNode("Sun", "http://java.sun.com")));
return new DefaultTreeModel(root);
}
private static Hashtable makeNode (String name, String url) {
Hashtable hashtable = new Hashtable();
hashtable.put("name", name);
hashtable.put("url", url);
return hashtable;
}
}