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);
}
}
===================================================================
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);
}
}
===================================================================
- relates to
-
JDK-4494085 Need to allow right-click through WMouseDragGestureRecognizer
-
- Resolved
-