AWTでドラッグアンドドロップを試す

戻る

このサイトを参考にしています。




import java.awt.*; import java.awt.datatransfer.*; import java.awt.dnd.*; import java.awt.event.*; import java.io.*; /** $Id: awt-dnd.html,v 1.1 2009/06/22 16:12:04 kishi Exp kishi $ */ public class DNDTest implements DragGestureListener, DragSourceListener, DropTargetListener, Transferable { static final DataFlavor[] supportedFlavors = { null }; static { try { supportedFlavors[ 0 ] = new DataFlavor( DataFlavor.javaJVMLocalObjectMimeType ); } catch ( Exception ex ) { ex.printStackTrace(); } } Object object; // Transferable methods. public Object getTransferData( DataFlavor flavor ) { if ( flavor.isMimeTypeEqual( DataFlavor.javaJVMLocalObjectMimeType ) ) return object; else return null; } public DataFlavor[] getTransferDataFlavors() { return supportedFlavors; } public boolean isDataFlavorSupported( DataFlavor flavor ) { return flavor.isMimeTypeEqual( DataFlavor.javaJVMLocalObjectMimeType ); } // DragGestureListener method. public void dragGestureRecognized( DragGestureEvent ev ) { ev.startDrag( null, this, this ); } // DragSourceListener methods. public void dragDropEnd( DragSourceDropEvent ev ) { } public void dragEnter( DragSourceDragEvent ev ) { } public void dragExit( DragSourceEvent ev ) { } public void dragOver( DragSourceDragEvent ev ) { object = ev.getSource(); } public void dropActionChanged( DragSourceDragEvent ev ) { } // DropTargetListener methods. public void dragEnter( DropTargetDragEvent ev ) { } public void dragExit( DropTargetEvent ev ) { } public void dragOver( DropTargetDragEvent ev ) { dropTargetDrag( ev ); } public void dropActionChanged( DropTargetDragEvent ev ) { dropTargetDrag( ev ); } void dropTargetDrag( DropTargetDragEvent ev ) { ev.acceptDrag( ev.getDropAction() ); } public void drop( DropTargetDropEvent ev ) { ev.acceptDrop( ev.getDropAction() ); try { Object target = ev.getSource(); Object source = ev.getTransferable().getTransferData( supportedFlavors[ 0 ] ); Component component = ( ( DragSourceContext ) source ).getComponent(); Container oldContainer = component.getParent(); Container container = ( Container ) ( ( DropTarget ) target ).getComponent(); container.add( component ); oldContainer.validate(); oldContainer.repaint(); container.validate(); container.repaint(); } catch ( Exception ex ) { ex.printStackTrace(); } ev.dropComplete( true ); } public static void main( String[] arg ) { Button button = new Button( "このボタンをドラッグしてください。" ); Label label = new Label( "このラベルをドラッグしてください。" ); Checkbox checkbox = new Checkbox( "このチェックボックスをドラッグしてください。" ); Frame source = new Frame( "SOURCE" ); source.setLayout( new FlowLayout() ); source.add( button ); source.add( label ); source.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent we ) { System.exit( 0 ); } } ); Frame target = new Frame( "TARGET" ); target.setLayout( new FlowLayout() ); target.add( checkbox ); target.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent we ) { System.exit( 0 ); } } ); DNDTest dndListener = new DNDTest(); DragSource dragSource = new DragSource(); DropTarget dropTarget1 = new DropTarget( source, DnDConstants.ACTION_MOVE, dndListener ); DropTarget dropTarget2 = new DropTarget( target, DnDConstants.ACTION_MOVE, dndListener ); DragGestureRecognizer dragRecognizer1 = dragSource.createDefaultDragGestureRecognizer( button, DnDConstants.ACTION_MOVE, dndListener ); DragGestureRecognizer dragRecognizer2 = dragSource.createDefaultDragGestureRecognizer( label, DnDConstants.ACTION_MOVE, dndListener ); DragGestureRecognizer dragRecognizer3 = dragSource.createDefaultDragGestureRecognizer( checkbox, DnDConstants.ACTION_MOVE, dndListener ); source.setBounds( 0, 200, 400, 200 ); target.setBounds( 420, 200, 400, 200 ); source.show(); target.show(); } }
戻る inserted by FC2 system