Duplicate :
|
|
Duplicate :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
Name: rmT116609 Date: 06/04/2003 FULL PRODUCT VERSION : java version "1.4.2-beta" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-beta-b19) Java HotSpot(TM) Client VM (build 1.4.2-beta-b19, mixed mode) FULL OS VERSION : Microsoft Windows 2000 [Version 5.00.2195] A DESCRIPTION OF THE PROBLEM : invoking DragSource's startDrag with an Image renders no image on drag STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : i. compile the attached class ii. run TestDND under 1.4.2-beta, or 1.4.1 on windows 2000 and winXP iii. attempt to drag an item from one column to another. iv. note that no icon appears during the drag. v. run TestDND under 1.4.1 on osX vi. note that an icon appears correctly. EXPECTED VERSUS ACTUAL BEHAVIOR : EXPECTED - an icon should appear during the drag. ACTUAL - no icon appears during the drag under windows 2000/xp with 1.4.1 and 1.4.2-beta; icon does appear under osX with 1.4.1 REPRODUCIBILITY : This bug can be reproduced always. ---------- BEGIN SOURCE ---------- /** * This code is just cobbled together and barely augmented from Sheetal Gupta's * demo code which was at * http://java.sun.com/docs/books/tutorial/dnd/sheetal.html * until recently; it's been augmented to show that the DND icon doesn't * render at all under Windows 1.4.1+ (haven't verified prior versions) - * amazingly, this works under osX 1.4.1.<br> * * This bug was originally filed and given an internal reference number of * 185600; it was never reviewed even though this is plainly a bug, and * other bugs i filed since were allowed entry into the database - i can * only assume it's because my original filing included code snippets * saying basically "here's snippets, modify sheetal's code" -- so this * time i've included all the code in one bloated class, and not including * the useless interface sheetal defined.<br> * * Sorry for the crappy formatting - it's just copy and paste (except my icon * additions) from the above url.<br> */ import java.awt.*; import java.awt.event.*; import java.awt.dnd.*; import java.awt.datatransfer.*; import java.io.*; import java.net.URL; import java.util.*; import javax.swing.*; public class TestDND { public static void main (String args[]) { TestDND testDND = new TestDND(); } /** * constructor * creates the frame, the lists in it and sets the data in the lists */ public TestDND() { JFrame f = new JFrame("Drag and Drop Lists"); DNDList sourceList = new DNDList(); // add data to the source List DefaultListModel sourceModel = new DefaultListModel(); sourceModel.addElement( "Source Item1"); sourceModel.addElement( "Source Item2"); sourceModel.addElement( "Source Item3"); sourceModel.addElement( "Source Item4"); // gets the panel with the List and a heading for the List JPanel sourcePanel = getListPanel(sourceList, "SourceList", sourceModel); DNDList targetList = new DNDList(); // add data to the target List DefaultListModel targetModel = new DefaultListModel(); targetModel.addElement( "Target Item1"); targetModel.addElement( "Target Item2"); targetModel.addElement( "Target Item3"); targetModel.addElement( "Target Item4"); JPanel targetPanel = getListPanel(targetList, "TargetList", targetModel); JPanel mainPanel = new JPanel(); mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.X_AXIS)); mainPanel.add( sourcePanel ); mainPanel.add( targetPanel ); f.getContentPane().add( mainPanel ); f.setSize (300, 300); f.addWindowListener (new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); f.setVisible (true); } /** * a convenience method * used for positioning of the ListBox and the Label. * * @param list - the special DND List * @param labelName - the heading for the list * @param listModel - model for the list */ private JPanel getListPanel(DNDList list, String labelName, DefaultListModel listModel ){ JPanel listPanel = new JPanel(); JScrollPane scrollPane = new JScrollPane(list); list.setModel(listModel); JLabel nameListName = new JLabel(labelName ); listPanel.setLayout( new BorderLayout()); listPanel.add(nameListName, BorderLayout.NORTH); listPanel.add( scrollPane, BorderLayout.CENTER); return listPanel; } protected class DNDList extends JList implements DropTargetListener,DragSourceListener, DragGestureListener { /** * enables this component to be a dropTarget */ DropTarget dropTarget = null; /** * enables this component to be a Drag Source */ DragSource dragSource = null; ImageIcon ii = null; /** * constructor - initializes the DropTarget and DragSource. */ public DNDList() { dropTarget = new DropTarget (this, this); dragSource = new DragSource(); dragSource.createDefaultDragGestureRecognizer( this, DnDConstants.ACTION_MOVE, this); try { URL u = new URL("http://java.sun.com/docs/books/tutorial/images/TOCIcon.gif"); this.ii = new ImageIcon(u); } catch (Exception e) { System.err.println("Exception in grabbing image icon: " + e); } } /** * is invoked when you are dragging over the DropSite * */ public void dragEnter (DropTargetDragEvent event) { // debug messages for diagnostics System.out.println( "dragEnter"); event.acceptDrag (DnDConstants.ACTION_MOVE); } /** * is invoked when you are exit the DropSite without dropping * */ public void dragExit (DropTargetEvent event) { System.out.println( "dragExit"); } /** * is invoked when a drag operation is going on * */ public void dragOver (DropTargetDragEvent event) { System.out.println( "dragOver"); } /** * a drop has occurred * */ public void drop (DropTargetDropEvent event) { try { Transferable transferable = event.getTransferable(); // we accept only Strings if (transferable.isDataFlavorSupported (DataFlavor.stringFlavor)){ event.acceptDrop(DnDConstants.ACTION_MOVE); String s = (String)transferable.getTransferData ( DataFlavor.stringFlavor); addElement( s ); event.getDropTargetContext().dropComplete(true); } else{ event.rejectDrop(); } } catch (IOException exception) { exception.printStackTrace(); System.err.println( "Exception" + exception.getMessage()); event.rejectDrop(); } catch (UnsupportedFlavorException ufException ) { ufException.printStackTrace(); System.err.println( "Exception" + ufException.getMessage()); event.rejectDrop(); } } /** * is invoked if the use modifies the current drop gesture * */ public void dropActionChanged ( DropTargetDragEvent event ) { } /** * a drag gesture has been initiated * */ public void dragGestureRecognized( DragGestureEvent event) { Object selected = getSelectedValue(); if ( selected != null ){ StringSelection text = new StringSelection( selected.toString()); // as the name suggests, starts the dragging dragSource.startDrag (event, DragSource.DefaultMoveDrop, this.ii.getImage(), new Point(5, 5), text, this); } else { System.out.println( "nothing was selected"); } } /** * this message goes to DragSourceListener, informing it that the dragging * has ended * */ public void dragDropEnd (DragSourceDropEvent event) { if ( event.getDropSuccess()){ removeElement(); } } /** * this message goes to DragSourceListener, informing it that the dragging * has entered the DropSite * */ public void dragEnter (DragSourceDragEvent event) { System.out.println( " dragEnter"); } /** * this message goes to DragSourceListener, informing it that the dragging * has exited the DropSite * */ public void dragExit (DragSourceEvent event) { System.out.println( "dragExit"); } /** * this message goes to DragSourceListener, informing it that the dragging is currently * ocurring over the DropSite * */ public void dragOver (DragSourceDragEvent event) { System.out.println( "dragExit"); } /** * is invoked when the user changes the dropAction * */ public void dropActionChanged ( DragSourceDragEvent event) { System.out.println( "dropActionChanged"); } /** * adds elements to itself * */ public void addElement( Object s ){ (( DefaultListModel )getModel()).addElement (s.toString()); } /** * removes an element from itself */ public void removeElement(){ (( DefaultListModel)getModel()).removeElement( getSelectedValue()); } } } ---------- END SOURCE ---------- (Review ID: 186473) ======================================================================
|