我找到了本教程:Drag and dropping files to a Java desktop application
它会正确显示面板并启用拖放功能,但会发出错误消息
Can only iterate over an array or an instance of java.lang.Iterable
指段落:
for (File file : files) {
// Print out the file path
System.out.println("File path is '" + file.getPath() + "'.");
}
我真的不知道该怎么解决...
你能帮我吗?
更新:
如果我尝试这样做:
List File[] files = (File[]) transferable.getTransferData(flavor);
它一直给我一个错误...
所以我尝试这样做:
File[] files = (File[]) transferable.getTransferData(flavor);
并且该代码不再带有下划线,但仍然无法正常工作。
我还找到了另一个教程:
how to drag and drop files from a directory in java
当然不行-.-'
我认为与解决方案最接近的是complete example:
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.swing.*;
@SuppressWarnings("serial")
public class FileDragDemo extends JPanel {
private JList list = new JList();
public FileDragDemo() {
list.setDragEnabled(true);
list.setTransferHandler(new FileListTransferHandler(list));
add(new JScrollPane(list));
}
private static void createAndShowGui() {
FileDragDemo mainPanel = new FileDragDemo();
JFrame frame = new JFrame("FileDragDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
@SuppressWarnings("serial")
class FileListTransferHandler extends TransferHandler {
private JList list;
public FileListTransferHandler(JList list) {
this.list = list;
}
public int getSourceActions(JComponent c) {
return COPY_OR_MOVE;
}
public boolean canImport(TransferSupport ts) {
return ts.isDataFlavorSupported(DataFlavor.javaFileListFlavor);
}
public boolean importData(TransferSupport ts) {
try {
@SuppressWarnings("rawtypes")
List data = (List) ts.getTransferable().getTransferData(
DataFlavor.javaFileListFlavor);
if (data.size() < 1) {
return false;
}
DefaultListModel listModel = new DefaultListModel();
for (Object item : data) {
File file = (File) item;
listModel.addElement(file);
}
list.setModel(listModel);
return true;
} catch (UnsupportedFlavorException e) {
return false;
} catch (IOException e) {
return false;
}
}
}
唯一的问题是我希望面板显示我上传的所有图像,而只显示最后一个条目
最佳答案
Nice article... Just please change List files to List< File > files :) Again great article!
^首先对该链接发表评论。
同样,在编写代码时,您可能会厌倦2011年的一些教程等,因为它们经常会教给您错误的操作方法。并不是我对这个话题了解得足够多,无法提出更好的建议。
关于java - 将图像拖放到Jpanel中并将其放入应用程序目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27918935/