Dragging component across JSplitPane

hi all,

i got two panels in JSplitPane. and i want to drag the components from one panel to another panel. so i used JLayeredPane for doing this. so that i can drag the component all over the splitpane.. but the problem is i couldnt added the component to the corressponding panel back.. . is there any other way of doing this ?

i would be very thankful if i got a solution...

regards

suresh

[422 byte] By [Suresh22a] at [2007-11-27 8:51:54]
# 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;

}

}

ruivalea at 2007-7-12 21:06:15 > top of Java-index,Desktop,Core GUI APIs...