请教:如何实现鼠标向窗口内拖入一个文件,程序获得文件路径的方法 很多软件都有这个功能,小弟不知道怎么在java中实现,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该还要用到操作系统的API, 关注一下~~ java在这方面是垃圾,你不用去实现了有很多经典的东西在java中都没有,你最好还是用其他的语言实现 谁说实现不了import java.awt.BorderLayout;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.Transferable;import java.awt.datatransfer.UnsupportedFlavorException;import java.io.File;import java.io.IOException;import java.util.Iterator;import java.util.List;import javax.swing.*;public class FileTransferHandler extends TransferHandler { private JList filePathList; public FileTransferHandler(JList filePathList) { this.filePathList = filePathList; } public boolean importData(JComponent c, Transferable t) { try { List files = (List)t.getTransferData(DataFlavor.javaFileListFlavor); addFilesToFilePathList(files); return true; } catch (UnsupportedFlavorException ufe) { ufe.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return false; } public boolean canImport(JComponent c, DataFlavor[] flavors) { for (int i = 0; i < flavors.length; i++) { if (DataFlavor.javaFileListFlavor.equals(flavors[i])) { return true; } } return false; } private void addFilesToFilePathList(List files) { DefaultListModel model = new DefaultListModel(); for (Iterator iter = files.iterator(); iter.hasNext();) { File file = (File) iter.next(); model.addElement(file.getPath()); } this.filePathList.setModel(model); } public static void main(String[] args) { JList filePathList = new JList(); filePathList.setTransferHandler(new FileTransferHandler(filePathList)); JFrame f = new JFrame("拖动文件到这个窗口里面"); f.getContentPane().add(new JScrollPane(filePathList), BorderLayout.CENTER); f.pack(); f.setLocationRelativeTo(null); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); }} 另外反过来的拖放也可以实现,下面这个程序中的filechooser中的文件就可以拖动到桌面或者是资源管理器或者任何其他接受文件拖放的程序里。import javax.swing.JFileChooser;public class T { public static void main(String[] args) { JFileChooser filechooser = new JFileChooser(); filechooser.setDragEnabled(true); filechooser.showOpenDialog(null); }}具体的实现可以参考 javax.swing.plaf.basic.BasicFileChooserUI.java 文件中的FileTransferHandler和FileTransferable内部类。 关于xxxxx.class.getClassLoader().getResource(fileName),请教大家。 面试题,接口的初始化~让人费解,那位大哥能解释解释 关于获取一个对象的值的问题。 java新手,简单问题 如何引用别的工程中的package?谢谢 如何在VC中调用java的可执行文件 请问什么字体每个字符是等宽的 帮新手写个程序吧 关于字符串输出 求救:我这个程序怎么扑捉不到鼠标事件 那一个java的开发工具好用? 怎样对XML文件中的某个东西进行加密? 请教高手一个问题:怎么在一个类里知道是哪个类在调用这个类
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;import javax.swing.*;public class FileTransferHandler extends TransferHandler {
private JList filePathList; public FileTransferHandler(JList filePathList) {
this.filePathList = filePathList;
} public boolean importData(JComponent c, Transferable t) {
try {
List files = (List)t.getTransferData(DataFlavor.javaFileListFlavor);
addFilesToFilePathList(files);
return true;
} catch (UnsupportedFlavorException ufe) {
ufe.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return false;
} public boolean canImport(JComponent c, DataFlavor[] flavors) {
for (int i = 0; i < flavors.length; i++) {
if (DataFlavor.javaFileListFlavor.equals(flavors[i])) {
return true;
}
}
return false;
} private void addFilesToFilePathList(List files)
{
DefaultListModel model = new DefaultListModel();
for (Iterator iter = files.iterator(); iter.hasNext();) {
File file = (File) iter.next();
model.addElement(file.getPath());
}
this.filePathList.setModel(model);
}
public static void main(String[] args)
{
JList filePathList = new JList();
filePathList.setTransferHandler(new FileTransferHandler(filePathList));
JFrame f = new JFrame("拖动文件到这个窗口里面");
f.getContentPane().add(new JScrollPane(filePathList), BorderLayout.CENTER);
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
public static void main(String[] args) {
JFileChooser filechooser = new JFileChooser();
filechooser.setDragEnabled(true);
filechooser.showOpenDialog(null);
}
}具体的实现可以参考 javax.swing.plaf.basic.BasicFileChooserUI.java 文件中的FileTransferHandler和FileTransferable内部类。