public static void main(String[] args) { new DropTargetFrame(); } }class DropTargetFrame extends JFrame { private static final long serialVersionUID = 1L;
private static final int DEFAULT_WIDTH = 300; private static final int DEFAULT_HEIGHT = 300; public DropTargetFrame() { super("文件信息"); JTextArea textArea = new JTextArea("@@@@@@@@@@将文件拖放到编辑区@@@@@@@@@@@@\n"); JScrollPane scrollPane =new JScrollPane(textArea); textArea.setLineWrap(true); textArea.setEditable(false); add(scrollPane); new DropTarget(textArea, new TextDropTargetListener(textArea)); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); }
}class TextDropTargetListener extends DropTargetAdapter { private JTextArea textArea; public TextDropTargetListener(JTextArea aTextArea) { textArea = aTextArea; } public void drop(DropTargetDropEvent event) { event.acceptDrop(DnDConstants.ACTION_COPY); Transferable transferable = event.getTransferable(); DataFlavor[] flavors = transferable.getTransferDataFlavors(); for (int i = 0; i < flavors.length; i++) { DataFlavor d = flavors[i]; try { if (d.equals(DataFlavor.javaFileListFlavor)) { @SuppressWarnings("unchecked") java.util.List<File> fileList = (java.util.List<File>) transferable.getTransferData(d); for (File f : fileList) { textArea.append("文件名: "+f.getName() + "\n"); textArea.append("文件属性: "); String value=null; if(f.isFile()) value ="文件, 文件大小: "+f.length()+"bytes"; else if(f.isDirectory()) value ="文件夹"; else value ="未知"; textArea.append(value+"\n"); } } } catch (Exception e) { textArea.append(e + "\n"); } } textArea.append("\n"); event.dropComplete(true); } }
Java中如果你的应用程序被打包成exe可执行文件的话,并且创建了快捷方式图标,可以通过命令行参数实现拖拽文件到图标上打开应用程序的同时打开被拖拽的文件,但要注意的是只有你的入口程序才能获取你刚才被拖动的文件信息。 下面是一个例子: public class MainUI{ public static START_FILE_PATH; public static main(String [] args) { if(args.length>0) { START_FILE_PATH = args[0];//获取文件的URL信息,这样我们在其他的地方就可以创建File对像 }else { START_FILE_PATH = null; } } } class SelectedFile { if(MainUI.START_FILE_PATH!=null&&MainUI.START_FILE_PATH.length()>0) { File file = new File(MainUI.START_FILE_PATH); ......这里可以实现你想要的操作 }
import java.awt.dnd.*;
import java.io.*;
import javax.swing.*;/**
* 一个简单的拖放示例程序 将文件或文件夹拖放到文本区然后放下,就会显示这些文件的一些信息
*
* @author
* @version
*/
public class ShowMsg {
public static void main(String[] args) {
new DropTargetFrame();
}
}class DropTargetFrame extends JFrame { private static final long serialVersionUID = 1L;
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 300; public DropTargetFrame() {
super("文件信息");
JTextArea textArea = new JTextArea("@@@@@@@@@@将文件拖放到编辑区@@@@@@@@@@@@\n");
JScrollPane scrollPane =new JScrollPane(textArea);
textArea.setLineWrap(true);
textArea.setEditable(false);
add(scrollPane);
new DropTarget(textArea, new TextDropTargetListener(textArea));
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}class TextDropTargetListener extends DropTargetAdapter {
private JTextArea textArea; public TextDropTargetListener(JTextArea aTextArea) {
textArea = aTextArea;
} public void drop(DropTargetDropEvent event) {
event.acceptDrop(DnDConstants.ACTION_COPY);
Transferable transferable = event.getTransferable();
DataFlavor[] flavors = transferable.getTransferDataFlavors();
for (int i = 0; i < flavors.length; i++) {
DataFlavor d = flavors[i];
try {
if (d.equals(DataFlavor.javaFileListFlavor)) {
@SuppressWarnings("unchecked")
java.util.List<File> fileList = (java.util.List<File>) transferable.getTransferData(d);
for (File f : fileList) {
textArea.append("文件名: "+f.getName() + "\n");
textArea.append("文件属性: ");
String value=null;
if(f.isFile())
value ="文件, 文件大小: "+f.length()+"bytes";
else if(f.isDirectory())
value ="文件夹";
else
value ="未知";
textArea.append(value+"\n");
}
}
}
catch (Exception e) {
textArea.append(e + "\n");
}
}
textArea.append("\n");
event.dropComplete(true);
}
}
下面是一个例子:
public class MainUI{
public static START_FILE_PATH;
public static main(String [] args) {
if(args.length>0) {
START_FILE_PATH = args[0];//获取文件的URL信息,这样我们在其他的地方就可以创建File对像
}else {
START_FILE_PATH = null;
}
}
}
class SelectedFile {
if(MainUI.START_FILE_PATH!=null&&MainUI.START_FILE_PATH.length()>0) {
File file = new File(MainUI.START_FILE_PATH);
......这里可以实现你想要的操作
}
}