Как реализовать Drag & Drop функциональность в своем приложения

В java хорошо проиллюстрирован способ реализации Drag & Drop функциональности приложения. Разработчик может использовать этот совет, чтобы обеспечить дополнительную функциональность перетаскивания для своих пользователей. Совет также включает в себя способ определения типа перетаскиваемого объекта. Это в дальнейшем может помочь разработчикам изменить свойства перетаскиваемого объекта.

import java.awt.*;
import java.awt.dnd.*;
import java.awt.datatransfer.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
 
public class DropTest2 extends JFrame implements DropTargetListener {
 
  DropTarget dt;
  JTextArea ta;
 
  public DropTest2() {
    super("Drop Test");
    setSize(300,300);
    addWindowListener(new BasicWindowMonitor());
 
    getContentPane().add(
        new JLabel("Drop a list from your file chooser here:"),
  BorderLayout.NORTH);
    ta = new JTextArea();
    ta.setBackground(Color.white);
    getContentPane().add(ta, BorderLayout.CENTER);
 
   // Создали нашу текстовую область
 // Этот класс будет обрабатывать события
    dt = new DropTarget(ta, this);
    setVisible(true);
  }
 
  public void dragEnter(DropTargetDragEvent dtde) {
    System.out.println("Drag Enter");
  }
 
  public void dragExit(DropTargetEvent dte) {
    System.out.println("Drag Exit");
  }
 
  public void dragOver(DropTargetDragEvent dtde) {
    System.out.println("Drag Over");
  }
 
  public void dropActionChanged(DropTargetDragEvent dtde) {
    System.out.println("Drop Action Changed");
  }
 
  public void drop(DropTargetDropEvent dtde) {
    try {
      // Получаем объект и пытаемся выяснить что это
      Transferable tr = dtde.getTransferable();
      DataFlavor[] flavors = tr.getTransferDataFlavors();
      for (int i = 0; i < flavors.length; i++) {
  System.out.println("Possible flavor: " + flavors[i].getMimeType());
  // Проверка списков файлов
  if (flavors[i].isFlavorJavaFileListType()) {
    // Великолепно, теперь перетаскиваем...
    dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
    ta.setText("Successful file list drop.\n\n");
     
    // And add the list of file names to our text area
    java.util.List list = (java.util.List)tr.getTransferData(flavors[i]);
    for (int j = 0; j < list.size(); j++) {
      ta.append(list.get(j) + "\n");
    }
 
    // Если дошли до сюда, значит все хорошо
    dtde.dropComplete(true);
    return;
  }
  // это другой java-объект?
  else if (flavors[i].isFlavorSerializedObjectType()) {
    dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
    ta.setText("Successful text drop.\n\n");
    Object o = tr.getTransferData(flavors[i]);
    ta.append("Object: " + o);
    dtde.dropComplete(true);
    return;
  }
  // Как насчет входной поток?
  else if (flavors[i].isRepresentationClassInputStream()) {
    dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
    ta.setText("Successful text drop.\n\n");
    ta.read(new InputStreamReader(
                  (InputStream)tr.getTransferData(flavors[i])),
      "from system clipboard");
    dtde.dropComplete(true);
    return;
  }
      }
    // пользователь не должен иметь за список файл
      System.out.println("Drop failed: " + dtde);
      dtde.rejectDrop();
    } catch (Exception e) {
      e.printStackTrace();
      dtde.rejectDrop();
    }
  }
 
  public static void main(String args[]) {
    new DropTest2();
  }
}
Обновлено: 07.04.2017 — 15:48

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.