我希望能够在JLabel从图像中丢弃时设置图像。一个网页浏览器。我基于Drag-and-Drop Support for Images的实现。将图像从浏览器拖放到JLabel上
@Override
public boolean importData(JComponent comp, Transferable t) {
if (comp instanceof JLabel) {
JLabel label = (JLabel) comp;
if (t.isDataFlavorSupported(DataFlavor.imageFlavor)) {
try {
image = (Image) t.getTransferData(DataFlavor.imageFlavor);
ImageIcon icon = new ImageIcon(image);
label.setIcon(icon);
return true;
} catch (Throwable th) {
log.error("Failed to accept dropped image", th);
}
} else if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
try {
@SuppressWarnings("unchecked")
List<File> files = (List<File>) t.getTransferData(DataFlavor.javaFileListFlavor);
if (files.size() == 1) {
ImageIcon icon = new ImageIcon(files.get(0).getAbsolutePath());
label.setIcon(icon);
}
return true;
} catch (Throwable th) {
log.error("Failed to accept dropped image", th);
}
}
}
return false;
}
对于DataFlavor.javaFileListFlavor部分一切工作正常,但与DataFlavor.imageFlavour产生的图像总是空和ImageIcon的被实例化时,一个NullPointerException异常被抛出。
有人知道为什么会发生这种情况?
感谢您花时间调查TE。我不知道发生了什么,但使用与您完全相同的设置(chrome,OSX 10.7.2,java 1.6.0_29)我的代码和我的代码都获得了空传输数据。 – Philippe 2012-01-08 21:07:22
它从Safari和邮件工作 – Philippe 2012-01-08 21:14:37