Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4833971

JTree nodes which implement Drag&Drop and Mouse Event act incorrect

    XMLWordPrintable

Details

    • x86
    • linux_redhat_6.2

    Description

      OS: Red Hat Linux 6.2J Second Edition
      Desktop environment: GNOME
      J2SE version: 1.3.1_06

      JTree nodes which implement Drag&Drop and Mouse Event act incorrect.
      When RIGHT click JTree node, drag&drop event runs.
      Drag&Drop event should occur only when we keep finger on left button of a mouse.

      We observed this problem with Red Hat Linux, and the behavior seems
      fine with Windows2000.

      Procedure to reproduce the problem:
      1) run the sample program (MainFrame.class)
      2) right click one of JTree node
      3) Drag&Drop event runs

      Behavior of Windows and RedHat Linux is different and behavior of
      Windows2000 seems correct.


      Sample code 1: TreeTest.java
      ===================================================================
      import javax.swing.*;
      import javax.swing.tree.TreeSelectionModel;
      import javax.swing.tree.*;
      import javax.swing.event.*;
      import java.io.*;
      import java.awt.*;
      import java.awt.event.*;
      import java.awt.dnd.*;
      import java.awt.datatransfer.Transferable;
      import java.awt.datatransfer.DataFlavor;

      public class TreeTest extends JTree implements DragGestureListener,
                                                     DragSourceListener,
                                                     DropTargetListener,
                                                     Transferable,
                                                     MouseListener{

          public TreeTest(TreeNode top){
              super(top);
              super.addMouseListener(this);
              DragSource dragSource = DragSource.getDefaultDragSource();
              dragSource.createDefaultDragGestureRecognizer(this,
                      DnDConstants.ACTION_COPY_OR_MOVE,
                      this);
              new DropTarget(this,
                      DnDConstants.ACTION_COPY_OR_MOVE,
                      this);

          }


          public void dragGestureRecognized(DragGestureEvent e){
              int selRow = getRowForLocation((int)e.getDragOrigin().getX(),
                      (int)e.getDragOrigin().getY());

              if(selRow != -1){
                  TreePath selPath
                      = getPathForLocation((int)e.getDragOrigin().getX(),
                                           (int)e.getDragOrigin().getY());
                  e.startDrag(DragSource.DefaultCopyDrop, this , this);
              }
          }

          public Object getTransferData(DataFlavor flavor){
              return new Object();
          }


          public DataFlavor[] getTransferDataFlavors(){
              DataFlavor objFlavor = new DataFlavor("application/x-java-object", "Object");
              DataFlavor[] f = new DataFlavor[1];
              f[0] = objFlavor;
              return f;
          }

          public boolean isDataFlavorSupported(DataFlavor flavor){
              if (flavor.getHumanPresentableName().equals("Object")){
                  return true;
              }else{
                  return false;
              }
          }



          public void dragEnter(DropTargetDragEvent dtde){}
          public void dragExit(DropTargetEvent dte){}
          public void dragOver(DropTargetDragEvent dtde){}
          public void drop(DropTargetDropEvent dtde){}
          public void dropActionChanged(DropTargetDragEvent dtde){}

          public void mouseClicked(MouseEvent e){}
          public void mouseEntered(MouseEvent e){}
          public void mouseExited(MouseEvent e){}
          public void mousePressed(MouseEvent e){

              int modify = e.getModifiers();
              if( (modify & MouseEvent.BUTTON1_MASK) != MouseEvent.BUTTON1_MASK ) {
                  int selRow = getRowForLocation(e.getX(), e.getY());
                  if (selRow != -1){
                      TreePath selPath = getPathForLocation(e.getX(), e.getY());
                      setSelectionPath(selPath);
                      JPopupMenu projectMenu = new JPopupMenu();
                      JMenuItem createPalette = new JMenuItem("test1");
                      JMenuItem setProperty = new JMenuItem("test2");
                      projectMenu.add(createPalette);
                      projectMenu.add(setProperty);
                      projectMenu.show(e.getComponent(), e.getX(), e.getY());
                  }
              }
          }
          public void mouseReleased(MouseEvent e){}


          public void dragDropEnd(DragSourceDropEvent dsde){}
          public void dragEnter(DragSourceDragEvent dsde){}
          public void dragExit(DragSourceEvent dse){}
          public void dragOver(DragSourceDragEvent dsde){}
          public void dropActionChanged(DragSourceDragEvent dsde){}


      }
      ===================================================================


      Sample code 2: MainFrame.java
      ===================================================================
      import javax.swing.JTree;
      import javax.swing.tree.DefaultMutableTreeNode;
      import javax.swing.event.TreeSelectionListener;
      import javax.swing.event.TreeSelectionEvent;
      import javax.swing.tree.TreeSelectionModel;
      import java.net.URL;
      import java.io.IOException;
      import javax.swing.JEditorPane;
      import javax.swing.JScrollPane;
      import javax.swing.JSplitPane;
      import javax.swing.JFrame;
      import java.awt.*;
      import java.awt.event.*;

      public class MainFrame extends JFrame {


          public MainFrame() {
              super("MainFrame");
              DefaultMutableTreeNode top = new DefaultMutableTreeNode("Top");
              createNodes(top);
              TreeTest tree = new TreeTest(top);
              JScrollPane treeView = new JScrollPane(tree);
              getContentPane().add(treeView, BorderLayout.CENTER);
          }


          private void createNodes(DefaultMutableTreeNode top) {
              DefaultMutableTreeNode test1 = null;
              DefaultMutableTreeNode test2 = null;
              DefaultMutableTreeNode test3 = null;
              DefaultMutableTreeNode test4 = null;
              DefaultMutableTreeNode test5 = null;
              test1 = new DefaultMutableTreeNode("test1");
              test2 = new DefaultMutableTreeNode("test2");
              test3 = new DefaultMutableTreeNode("test3");
              test4 = new DefaultMutableTreeNode("test4");
              test5 = new DefaultMutableTreeNode("test5");
              top.add(test1);
              top.add(test2);
              top.add(test3);
              top.add(test4);
              top.add(test5);
          }

          public static void main(String[] args) {
              JFrame frame = new MainFrame();
       
              frame.addWindowListener(new WindowAdapter() {
                  public void windowClosing(WindowEvent e) {
                      System.exit(0);
                  }
              });
       
              frame.pack();
              frame.setVisible(true);
          }
      }

      ===================================================================

      Attachments

        Issue Links

          Activity

            People

              dassunw Das Das (Inactive)
              duke J. Duke
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:
                Imported:
                Indexed: