�G�N�X�v���[���iWindows�j����t�@�C�����h���b�O���h���b�v�������C�̊�
2000.11.16 �V�K

���́AJava �A�v���P�[�V�����Ԃ̃h���b�O���h���b�v�i�ȍ~�A�c���c�j�����A�l�C�e�B�u�E�v���b�g�t�H�[������̂c���c�̎����̂ق����͂邩�ɊȒP�ł��B ���R���ȒP�ŁA�u�󂯑��v�������쐬����Ηǂ��A���G�ȁu���葤�v�����Ȃ��čςނ���ł��B ���R�u���葤�v�̓l�C�e�B�u�A�������� Java VM ���S�����Ă���܂��B

�����T���v�������Ă݂܂��傤�B
�z���g�ɊȒP�ł��B ���̃\�[�X�E�R�[�h�͒P�Ƃœ��삷��悤�ɂȂ��Ă���̂ŁA���ʂȕ����������ď��������ł��B ���A�{���I�ȂƂ���͂c���c�̃h���b�v����ɑ΂���C�x���g�E���X�i���������Ă��镔���ł��B

�h���b�v����ɑ΂���C�x���g�E���X�i DropTargetListener �́A�T�‚̃��\�b�h��L���Ă��܂��B ���̂�������g�p����̂́A�h���b�O��������o�����Ƃ��� dragEnter() �Ƃ������\�b�h�B �����āA���ۂɃh���b�v���ꂽ�Ƃ��ɔ�������C�x���g���������� drop() ���\�b�h�́A�v�Q�‚ł��B
dragEnter() ���\�b�h�̓h���b�O������󂯓����A�Ƃ����������L�q���邾���ł��B

�����Ċ̐S�� drop() ���\�b�h�ł����A���̃��\�b�h�ł�

�Ƃ�����A�̏������L�q���܂��B �ڍׂ́A�\�[�X�R�[�h���Q�l�ɂ��Ă��������B

���ӓ_�Ƃ��ẮA�h���b�v����鑤���L�`���Ɛݒ肵�Ă����Ȃ���΂����Ȃ��Ƃ���ł��B ���̃T���v���ł�

    // �c���c�󂯓���R���|�[�l���g�̊֘A�t��
    new DropTarget(this,this);
    new DropTarget(routePanel,this);
�Ƃ��Ă���̂ŁA�p�l���ƃ^�C�g���E�o�[�ǂ���ɂ��c���c���󂯕t���Ă��܂��B ����́A�h���b�v����̎󂯕t���R���|�[�l���g�ƃC�x���g�E���X�i���֘A�t���Ă��܂��B

�܂��A���Ⴂ�����₷���_�������Ă����܂��B
������R���|�[�l���g�̊֘A�t�����s���Ă��Ă��A���̏�ɈႤ�R���|�[�l���g���d�Ȃ��Ă���ꍇ�ɂ͂c���c�͖����ƂȂ�܂��B �Ⴆ�΁A���̃T���v���� JButton ����V�K�lj������Ƃ���ƁA���̃{�^���ɑ΂��Ăc���c���s���Ă������͂���܂���B �d�Ȃ��đO�ʂɂ���R���|�[�l���g�ɑ΂���c���c�C�x���g�́A��������Ȃ�����Ƃ����āA���̌��̃R���|�[�l���g�ɂ͓`���Ȃ��悤�ł��B


�uSampleDnD.java�v�̃\�[�X�R�[�h
import java.awt.*;
import java.awt.dnd.*;
import java.awt.datatransfer.*;
import javax.swing.*;
import java.io.*;

/**
 * �h���b�O���h���b�v�̃T���v���E�v���O�����ł��D
 * 
 * @author Musi_chan
 * ([email protected])
 * @version 2000/11/16 19:49
 */
public class SampleDnD extends JFrame implements DropTargetListener {
/******************************************************************************
  �t�B�[���h
******************************************************************************/
  /**
   * ���C���E�p�l���̃C���X�^���X�ϐ��ł��D
   */
  private JPanel routePanel;

/******************************************************************************
  �R���X�g���N�^
******************************************************************************/
  /**
   * �R���X�g���N�^�ł��D
   */
  public SampleDnD() {
    this("");
  }

  /**
   * �R���X�g���N�^�ł��D
   * 
   * @param args �N�����̈����i���b�N���t�B�[�����j
   */
  public SampleDnD(String args) {
    // ���b�N���t�B�[�����ێ��p���[�J���ϐ�
    String LAFName;

    // �e��E�B���h�E�ݒ�
    setLocation(50,25);
    setSize(360,280);
    setResizable(true);
    setTitle("Drag&Drop sample program.");
    getContentPane().setLayout(new BorderLayout());
    //setIconImage(ICON.getImage());
    setBackground(SystemColor.menu);
    setForeground(SystemColor.menuText);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    // ���b�N���t�B�[�����̔���
    if(args.equals("windows")) {
      LAFName="com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
    } else if(args.equals("motif")) {
      LAFName="com.sun.java.swing.plaf.motif.MotifLookAndFeel";
    } else {
      LAFName="javax.swing.plaf.metal.MetalLookAndFeel";
    }

    // ���C���E�p�l���̐ݒ�ƒlj�
    setRoutePanel(LAFName);
    getContentPane().add(routePanel,BorderLayout.CENTER);

    // ���C���E�E�B���h�E�̕\��
    setVisible(true);
  }

/******************************************************************************
  ���\�b�h
******************************************************************************/

/******************************************************************************
  �r���[
******************************************************************************/
  /**
   * ���C���E�p�l���̐ݒ�����郁�\�b�h�ł��D
   * 
   * @param LAFName ���b�N���t�B�[����
   */
  private void setRoutePanel(String LAFName) {
    // ���b�N���t�B�[���ݒ�
    try {
      UIManager.setLookAndFeel(LAFName);
    } catch(ClassNotFoundException cnfe) {
    } catch(InstantiationException ie) {
    } catch(IllegalAccessException iae) {
    } catch(UnsupportedLookAndFeelException ulafe) {
    }

    // ���[�g�p�l���̃C���X�^���X����
    routePanel=new JPanel();

    // �c���c�󂯓���R���|�[�l���g�̊֘A�t��
    new DropTarget(this,this);
    new DropTarget(routePanel,this);
  }

  /**
   * ���_�C�A���O��\�����郁�\�b�h�ł��D
   * 
   * @param message ���b�Z�[�W
   */
  public void showInformationMessageDialog(String message) {
    // ���_�C�A���O�̕\��
    JOptionPane.showMessageDialog(this,new JLabel(message)
      ,"Information...",JOptionPane.INFORMATION_MESSAGE);
    repaint();
  }

  /**
   * �x���_�C�A���O��\�����郁�\�b�h�ł��D
   * 
   * @param message �x�����b�Z�[�W
   */
  public void showWarningMessageDialog(String message) {
    // �x���_�C�A���O�̕\��
    JOptionPane.showMessageDialog(this,new JLabel(message)
      ,"Warning...",JOptionPane.WARNING_MESSAGE);
    repaint();
  }

  /**
   * �G���[�_�C�A���O��\�����郁�\�b�h�ł��D
   * 
   * @param message �G���[���b�Z�[�W
   */
  public void showErrorMessageDialog(String message) {
    // �G���[�_�C�A���O�̕\��
    JOptionPane.showMessageDialog(this,new JLabel(message)
      ,"Error...",JOptionPane.ERROR_MESSAGE);
    repaint();
  }

/******************************************************************************
  �R���g���[��
******************************************************************************/
  /**
   * ���C�����\�b�h�ł��D�N�����ɌĂяo����܂��D
   * 
   * @param args �R�}���h���C������
   */
  public static void main(String[] args) {
    // ���g�̃C���X�^���X�����i���A�v���̊J�n�j
    if(args.length==0) {
      new SampleDnD();
    } else {
      new SampleDnD(args[0]);
    }
  }

  /**
   * �h���b�O���h���b�v�i�h���b�v���j�C�x���g�p���\�b�h�ł��D
   * �h���b�O��������o�����Ƃ��ɌĂяo����܂��D
   * 
   * @param dtde �h���b�O���h���b�v�C�x���g
   */
  public void dragEnter(DropTargetDragEvent dtde) {
    dtde.acceptDrag(DnDConstants.ACTION_COPY);
  }

  /**
   * �h���b�O���h���b�v�i�h���b�v���j�C�x���g�p���\�b�h�ł��D
   * �h���b�O���삪�h���b�v�Ȃ��̂Ƃ��ɌĂяo����܂��D
   * 
   * @param dte �h���b�O���h���b�v�C�x���g
   */
  public void dragExit(DropTargetEvent dte) {
  }

  /**
   * �h���b�O���h���b�v�i�h���b�v���j�C�x���g�p���\�b�h�ł��D
   * �h���b�O���삪�i�s���̂Ƃ��ɌĂяo����܂��D
   * 
   * @param dte �h���b�O���h���b�v�C�x���g
   */
  public void dragOver(DropTargetDragEvent dtde) {
  }

  /**
   * �h���b�O���h���b�v�i�h���b�v���j�C�x���g�p���\�b�h�ł��D
   * �h���b�O���삪�h���b�v�ŏI�������Ƃ��ɌĂяo����܂��D
   * 
   * @param dte �h���b�O���h���b�v�C�x���g
   */
  public void drop(DropTargetDropEvent dtde) {
    try {
      // �]�����ꂽ�f�[�^�̎擾
      Transferable tr=dtde.getTransferable();
      // �]���f�[�^���T�|�[�g�”\�ȃf�[�^���ǂ�������
      if(tr.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
        // �h���b�v������󂯓����
        dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);

        // �]���f�[�^����t�@�C���̃��X�g�𒊏o
        java.util.List myList=(java.util.List)tr.getTransferData(
          DataFlavor.javaFileListFlavor);
        // ���X�g�v�f���P�ꂩ�ǂ�������
        // �����t�@�C���̃h���b�v���󂯓����̂ł���΁C����s�v
        if(myList.size()==1) {
          // ���X�g����t�@�C���̎��o��
          File myFile=(File)myList.get(0);
          // �t�@�C���̐�΃p�X����\��
          // ���ۂɂ́C���̂P�s��ύX����Ɨǂ�
          showInformationMessageDialog(myFile.getAbsolutePath());
          // �h���b�v����𐳏�I��
          dtde.getDropTargetContext().dropComplete(true);
        } else {
          // �u�v�f�������v�Ƃ����x����\��
          showWarningMessageDialog("Too much elements.");
          // �h���b�v������ُ�I��
          dtde.getDropTargetContext().dropComplete(false);
        }
      } else {
        showWarningMessageDialog("Unsupported.");
        // �h���b�v������͂˂‚���
        dtde.rejectDrop();
      }
    } catch (IOException ioe) {
      showErrorMessageDialog("I/O exception.");
      // �h���b�v������͂˂‚���
      dtde.rejectDrop();
    } catch (UnsupportedFlavorException ufe) {
      showErrorMessageDialog("Unsupported");
      // �h���b�v������͂˂‚���
      dtde.rejectDrop();
    }
  }

  /**
   * �h���b�O���h���b�v�i�h���b�v���j�C�x���g�p���\�b�h�ł��D
   * ���[�U�����݂̃h���b�v�W�F�X�`���[��ύX�����Ƃ��ɌĂяo����܂��D
   * 
   * @param dte �h���b�O���h���b�v�C�x���g
   */
  public void dropActionChanged(DropTargetDragEvent dtde) {
  }
}

�߂�