Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.gui > #5360
| 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> |
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 | Next — Previous in thread | Find similar
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