Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.gui > #5360

Re: TransferHandler exportAsDone called before exportAsDrag returns

Newsgroups comp.lang.java.gui
Date 2013-06-11 07:44 -0700
References <83dd7dc7-c9d4-41b2-ada2-be50758aecf3@googlegroups.com> <534db8a1-6fb0-47a4-a532-30e4bbbf0495@googlegroups.com>
Message-ID <10095392-e92c-4285-b5f8-dbde7c18cb1a@googlegroups.com> (permalink)
Subject Re: TransferHandler exportAsDone called before exportAsDrag returns
From FredK <fred.l.kleinschmidt@gmail.com>

Show all headers | View raw


On Monday, June 10, 2013 3:14:11 PM UTC-7, Lew wrote:
> FredK wrote: > I have a subclass of JPanel for which I am trying to implement > drag-and-drop. I add a mouse listener to the component, and in > its mousePressed() method I call > JComponent c = (JComponent)event.getSource(); > TransferHandler th = c.getTransferHandler(); > th.exportAsDrag( comp, event, TransferHandler.COPY ); > > The problem is that the handler's exportAsDone() method is > called immediately - before exportAsDrag() returns, and > before the mouse is moved or released. Can you provide an SSCCE? http://sscce.org/ The problem appears to be in the part of the code you haven't shown us. Are you managing events on the EDT properly? -- Lew


I hadn't realized that JPanel (or I guess JComponent) had built-in DnD for bean properties - didn't see any mention of it in the Javadoc tutorials.
I now have it working - I had been using "text" as the argument for TransferHandler, but my component did not have a "text" property.

For example, this does work (and works for "text" when I add a "text" property to my panel):

package boeing.geoduck.viewer.swingitems;

import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.TransferHandler;

public class DragTest {

   public static void main( String args[] ) {
      SwingUtilities.invokeLater( new Runnable() {
         public void run() {
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
            frame.setSize( 300, 150 );

            JPanel w = new JPanel();
            frame.add( w, BorderLayout.CENTER );

            w.setTransferHandler( new TransferHandler( "background" ) );

            w.addMouseListener( new MouseAdapter() {
               @Override
               public void mousePressed( MouseEvent me ) {
                  JComponent comp = (JComponent) me.getSource();
                  TransferHandler handler = comp.getTransferHandler();
                  int actions = handler.getSourceActions( comp );
                  System.out.println( actions );
                  handler.exportAsDrag( comp, me, TransferHandler.COPY );
               }
            } );

            frame.setVisible( true );
         }
      } );
   }
}

-- 
Fred K

Back to comp.lang.java.gui | Previous | NextPrevious in thread | Find similar


Thread

TransferHandler exportAsDone called before exportAsDrag returns FredK <fred.l.kleinschmidt@gmail.com> - 2013-06-10 08:44 -0700
  Re: TransferHandler exportAsDone called before exportAsDrag returns Lew <lewbloch@gmail.com> - 2013-06-10 15:14 -0700
    Re: TransferHandler exportAsDone called before exportAsDrag returns FredK <fred.l.kleinschmidt@gmail.com> - 2013-06-11 07:44 -0700

csiph-web