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:
Ş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.