java - 将图像拖放到Jpanel中并将其放入应用程序目录中

标签 java swing compiler-errors drag-and-drop jpanel

我找到了本教程: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/

相关文章:

java - 在 java 中将 double 分成两部分 "integer & fraction"的最佳方法是什么

java - BrightScript Eclipse 插件在 OSX 上安装后不显示

java - 如何从库项目调用主项目中的类/方法?

java - 使用泛型将类类型从一个方法传递到另一个方法

java - 我应该如何进行软件分析?

java - 通过监听器从网格面板更新组件

Java BufferedImage/JPanel 不使用 JButton 更新新的黑色像素行

c++ - 从构造函数调用虚函数和纯虚函数

c++ - 解释错误: ISO C++ forbids declaration of `Personlist' with no type

java - 直方图放大问题