Hello all,
I am currently facing a problem with Drag and Drop using jdk1.3. The code works fine with jdk1.4. I want to drag a particular node from a tree and drop it on a table. I have implemented appropriate listeners but the drop function doesn't seem to work..It doesn't throw any exception as well..i am pasting the code.. I am sorry i know its too long. But it would be great if someone can help me out. I am new to
java swing
-- ganboy
import java.io.*;
import java.awt.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.awt.dnd.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import javax.swing.table.*;
import javax.swing.border.*;
import java.awt.datatransfer.*;
/*<
applet code="DragDropApplet.class" width=900 height=300> </applet>*/
public class DragDropApplet extends JApplet implements DragSourceListener, DragGestureListener,DropTargetListener,ActionListener {
JTree jtr;
JTable jtab;
JTable jtab1;
JTable jtab2;
JPanel jPanel;
DragSource ds;
DropTarget dt1;
DropTarget dt2;
DropTarget dt3;
DropTarget dt4;
DropTarget dt5;
DropTarget dt6;
JScrollPane scroller1;
JScrollPane scroller2;
JScrollPane scroller3;
JScrollPane scroller4;
TreePath selPath;
DefaultTreeModel dmodel;
DefaultTableModel model;
DefaultTableModel model1;
DefaultTableModel model2;
DefaultMutableTreeNode top;
Hashtable hash1;
StringSelection transferable;
Vector rowVec;
Vector rowVec1;
Vector rowVec2;
public void init() {
System.out.println("got in init().........................................");
this.setSize(700,400);
hash1 = new Hashtable();
try
{
top = new DefaultMutableTreeNode("List of tables");
DefaultMutableTreeNode top1 = new DefaultMutableTreeNode("Table1");
top1.add(new DefaultMutableTreeNode("Field1"));
top1.add(new DefaultMutableTreeNode("Field2"));
top1.add(new DefaultMutableTreeNode("Field3"));
top1.add(new DefaultMutableTreeNode("Field4"));
top1.add(new DefaultMutableTreeNode("Field5"));
top.add(top1);
DefaultMutableTreeNode top2 = new DefaultMutableTreeNode("Table2");
top2.add(new DefaultMutableTreeNode("Field1"));
top2.add(new DefaultMutableTreeNode("Field2"));
top2.add(new DefaultMutableTreeNode("Field3"));
top2.add(new DefaultMutableTreeNode("Field4"));
top2.add(new DefaultMutableTreeNode("Field5"));
top.add(top2);
DefaultMutableTreeNode top3 = new DefaultMutableTreeNode("Table3");
top3.add(new DefaultMutableTreeNode("Field1"));
top3.add(new DefaultMutableTreeNode("Field2"));
top3.add(new DefaultMutableTreeNode("Field3"));
top3.add(new DefaultMutableTreeNode("Field4"));
top3.add(new DefaultMutableTreeNode("Field5"));
top.add(top3);
DefaultMutableTreeNode top4 = new DefaultMutableTreeNode("Table4");
top4.add(new DefaultMutableTreeNode("Field1"));
top4.add(new DefaultMutableTreeNode("Field2"));
top4.add(new DefaultMutableTreeNode("Field3"));
top4.add(new DefaultMutableTreeNode("Field4"));
top4.add(new DefaultMutableTreeNode("Field5"));
top.add(top4);
this.getContentPane().setLayout(new GridLayout(1,2));
dmodel = new DefaultTreeModel(top);
jtr = new JTree(dmodel);
scroller1 = new JScrollPane(jtr);
this.getContentPane().add(scroller1);
JPanel jpanel = new JPanel();
jpanel.setLayout(new GridLayout(3,1));
/* Creating Field List table*/
JPanel topPanel = new JPanel();
topPanel.setLayout(new BorderLayout());
topPanel.add(new Label("Select List"), BorderLayout.NORTH);
jtab = new JTable();
model2 = (DefaultTableModel)jtab.getModel();
model2.addColumn("Field");
scroller2 = new JScrollPane(jtab);
topPanel.add(scroller2, BorderLayout.CENTER);
JButton jbtn1 = new JButton("Delete");
jbtn1.setActionCommand("delete1");
jbtn1.addActionListener(this);
JPanel jsouthPanel1 = new JPanel();
jsouthPanel1.setLayout(new BorderLayout());
jsouthPanel1.add(jbtn1,BorderLayout.EAST);
topPanel.add(jsouthPanel1, BorderLayout.SOUTH);
jpanel.add(topPanel);
/* Creating Criteria table*/
JPanel middlePanel = new JPanel();
middlePanel.setLayout(new BorderLayout());
middlePanel.add(new Label("Criteria"), BorderLayout.NORTH);
jtab1 = new JTable();
model = (DefaultTableModel)jtab1.getModel();
model.addColumn("Field");
model.addColumn("Field/Value");
model.addColumn("AND/OR");
JComboBox comboBox = new JComboBox();
comboBox.addItem("AND");
comboBox.addItem("OR");
TableColumn tempCol1 = jtab1.getColumnModel().getColumn(0);
tempCol1.setResizable(false);
TableColumn tempCol2 = jtab1.getColumnModel().getColumn(1);
tempCol2.setResizable(false);
TableColumn tempCol3 = jtab1.getColumnModel().getColumn(2);
tempCol3.setResizable(false);
tempCol3.setCellEditor(new DefaultCellEditor(comboBox));
scroller3 = new JScrollPane(jtab1);
middlePanel.add(scroller3, BorderLayout.CENTER);
JButton jbtn2 = new JButton("Delete");
jbtn2.setActionCommand("delete2");
jbtn2.addActionListener(this);
JPanel jsouthPanel2 = new JPanel();
jsouthPanel2.setLayout(new BorderLayout());
jsouthPanel2.add(jbtn2,BorderLayout.EAST);
middlePanel.add(jsouthPanel2, BorderLayout.SOUTH);
jpanel.add(middlePanel);
/* Creating sort Criteria table*/
JPanel bottomPanel = new JPanel();
bottomPanel.setLayout(new BorderLayout());
bottomPanel.add(new Label("Sort Criteria"), BorderLayout.NORTH);
jtab2 = new JTable();
model1 = (DefaultTableModel)jtab2.getModel();
model1.addColumn("Field");
model1.addColumn("Sort by");
JComboBox comboBox1 = new JComboBox();
comboBox1.addItem("ASCENDING");
comboBox1.addItem("DESCENDING");
TableColumn tempCol4 = jtab2.getColumnModel().getColumn(0);
tempCol4.setResizable(false);
TableColumn tempCol5 = jtab2.getColumnModel().getColumn(1);
tempCol5.setResizable(false);
tempCol5.setCellEditor(new DefaultCellEditor(comboBox1));
scroller4 = new JScrollPane(jtab2);
bottomPanel.add(scroller4, BorderLayout.CENTER);
JButton jbtn3 = new JButton("Delete");
jbtn3.setActionCommand("delete3");
jbtn3.addActionListener(this);
JPanel jsouthPanel3 = new JPanel();
jsouthPanel3.setLayout(new BorderLayout());
jsouthPanel3.add(jbtn3,BorderLayout.EAST);
bottomPanel.add(jsouthPanel3, BorderLayout.SOUTH);
jpanel.add(bottomPanel);
this.getContentPane().add(jpanel);
MouseListener ml = new MouseAdapter() {
public void mousePressed(MouseEvent e) {
selPath = jtr.getPathForLocation(e.getX(), e.getY());
}
};
jtr.addMouseListener(ml);
ds = new DragSource();
DragGestureRecognizer dgr = ds.createDefaultDragGestureRecognizer(jtr, DnDConstants.ACTION_COPY, this);
dt1 = new DropTarget(jtab, this);
dt2 = new DropTarget(jtab1, this);
dt3 = new DropTarget(jtab2, this);
dt4 = new DropTarget(scroller2, this);
dt5 = new DropTarget(scroller3, this);
dt6 = new DropTarget(scroller4, this);
setVisible(true);
}catch (Exception e){
e.printStackTrace();
}
}
/* If delete buttons clicked */
public void actionPerformed(ActionEvent e){
if("delete1".equals(e.getActionCommand())){
int delRows[] = jtab.getSelectedRows();
for(int j=0; j<delRows.length; j++){
model2.removeRow(delRows[j]-j);
}
}
if("delete2".equals(e.getActionCommand())){
int delRows[] = jtab1.getSelectedRows();
for(int j=0; j<delRows.length; j++){
model.removeRow(delRows[j]-j);
}
}
if("delete3".equals(e.getActionCommand())){
int delRows[] = jtab2.getSelectedRows();
for(int j=0; j<delRows.length; j++){
model1.removeRow(delRows[j]-j);
}
}
}
public void dragGestureRecognized(DragGestureEvent dge) {
DefaultMutableTreeNode dmtn = (DefaultMutableTreeNode)selPath.getLastPathComponent();
/* Storing the content of the dragged node*/
if(dmtn.getChildCount() == 0){
System.out.println("Drag Gesture Recognized!" + (selPath.getLastPathComponent()).toString() );
transferable = new StringSelection(dmtn.getParent()+"."+(selPath.getLastPathComponent()).toString());
ds.startDrag(dge, DragSource.DefaultCopyDrop, transferable, this);
}
}
public void dragEnter(DragSourceDragEvent dsde) {
//System.out.println("Drag Enter");
}
public void dragExit(DragSourceEvent dse) {
}
public void dragOver(DragSourceDragEvent dsde) {
}
public void dragDropEnd(DragSourceDropEvent dsde) {
}
public void dropActionChanged(DragSourceDragEvent dsde) {
}
public void dragEnter(DropTargetDragEvent dtde) {
}
public void dragExit(DropTargetEvent dte) {
}
public void dragOver(DropTargetDragEvent dtde) {
}
public void dropActionChanged(DropTargetDragEvent dtde) {
System.out.println("Drop Action Changed");
}
public void drop(DropTargetDropEvent dtde) {
System.out.println("Inside drop function");
try {
Object obj = dtde.getSource();
Transferable tr = dtde.getTransferable();
DataFlavor[] flavors = tr.getTransferDataFlavors();
if(obj.equals((Object)dt2) || obj.equals((Object)dt5)){
System.out.println("Tab val 2 ");
for (int i = 0; i < flavors.length; i++) {
dtde.acceptDrop(DnDConstants.ACTION_COPY);
rowVec1 = new Vector();
rowVec1.add(tr.getTransferData(flavors[i]));
model.addRow(rowVec1);
jtab1.updateUI();
dtde.dropComplete(true);
return;
}
}
if(obj.equals((Object)dt3) || obj.equals((Object)dt6)){
System.out.println("Tab val 3 ");
for (int i = 0; i < flavors.length; i++) {
dtde.acceptDrop(DnDConstants.ACTION_COPY);
rowVec2 = new Vector();
rowVec2.add(tr.getTransferData(flavors[i]));
model1.addRow(rowVec2);
jtab2.updateUI();
dtde.dropComplete(true);
return;
}
}
if(obj.equals((Object)dt1) || obj.equals((Object)dt4)){
System.out.println("Tab val 1 ");
for (int i = 0; i < flavors.length; i++) {
dtde.acceptDrop(DnDConstants.ACTION_COPY);
rowVec = new Vector();
rowVec.add(tr.getTransferData(flavors[i]));
model2.addRow(rowVec);
jtab.updateUI();
dtde.dropComplete(true);
return;
}
}
} catch (Exception e) {
e.printStackTrace();
dtde.rejectDrop();
}
}
}