Java Sürükle Bırak Uygulaması

03-04-2014
Bu yazımızda Java dilinde sürükle-bırak uygulaması yapacağız. Bu uygulamanın özelliği, bir dosyanın sürüklenip JTextArea üzerine bırakılması sonucunda bu dosyanın içeriğinin JTextArea'da gözükmesidir.

Şimdi basit bir GUI uygulaması yapalım:

import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetAdapter;
import java.awt.dnd.DropTargetDropEvent;
import java.io.*;

/**
 * JTextArea uzerine bir dosya birakildiginda iceriginin gosterilmesini saglar
 */
public class DragDrop extends JFrame {
    private DropTarget dt;
    private final JTextArea txtContent = new JTextArea(30, 100);

    public DragDrop() {
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setViewportView(txtContent);
        //txtContent nesnesine DropTarget event(olay) ekleniyor
        dt = new DropTarget(txtContent, new DropTargetAdapter() {
            @Override
            public void drop(DropTargetDropEvent dtde) {
                dropIntoTextArea(dtde);
            }
        });
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
        add(scrollPane, BorderLayout.CENTER);

        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public void dropIntoTextArea(DropTargetDropEvent dtde) {
        try {
            
            Transferable tr = dtde.getTransferable();
            DataFlavor[] flavors = tr.getTransferDataFlavors();
            for (int i = 0; i < flavors.length; i++) {
                 System.out.println("Olası flavor: "
                      + flavors[i].getMimeType());
                
 	         // Dosya listesinin turlerine gore kontrol etme
                if (flavors[i].isFlavorJavaFileListType()) {              
                    dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
                    // Suruklenip birakilan dosya(lar)'in adres(ler)i
                    java.util.List list = (java.util.List) tr
                            .getTransferData(flavors[i]);
                    for (int j = 0; j < list.size(); j++) {
                        txtContent.append(getContent(list.get(j).toString()) + "\n");
                    }

                    dtde.dropComplete(true);
                    return;
                }
                //Java nesnesi mi?
                else if (flavors[i].isFlavorSerializedObjectType()) {
                    dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);

                    Object o = tr.getTransferData(flavors[i]);
                    txtContent.append(String.valueOf(o));
                    dtde.dropComplete(true);
                    return;
                }
                // InputStream mi?
                else if (flavors[i].isRepresentationClassInputStream()) {
                    dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);

                    txtContent.read(new InputStreamReader((InputStream) tr
                                    .getTransferData(flavors[i])),
                            "sistem panosundan(clipboard) kopyala"
                    );
                    dtde.dropComplete(true);
                    return;
                }
            }
            
            System.out.println("Drop basarisiz: " + dtde);
            dtde.rejectDrop();
        } catch (Exception e) {
            e.printStackTrace();
            dtde.rejectDrop();
        }
    }
    public String getContent(String path) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path),"UTF-8"));
        String sCurrentLine, result = "";
        while ((sCurrentLine = br.readLine()) != null) {
            result += sCurrentLine + "\n";
        }
        return result;
    }

    public static void main(String[] args) {
        new DragDrop();
    }

}
Not: Birden fazla dosyayı sürükleyip bırakabilirsiniz.

© 2019 Tüm Hakları Saklıdır. Codesenior.COM