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.