我正在尝试通过拖放从网络浏览器接收图像,但失败了:
package tests;
import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
public class JDragDropTest extends JFrame {
public JDragDropTest() throws HeadlessException {
super("DragDropTest");
setLayout(new BorderLayout());
add(new JScrollPane(new JTextArea() {{
setTransferHandler(new TransferHandler() {
@Override
public boolean canImport(TransferSupport support) {
return true;
}
@Override
public boolean importData(TransferSupport support) {
int i=0;
append("flavors:\n");
for( DataFlavor flavor : support.getDataFlavors() ) {
append(String.valueOf(i+1) + "): " + flavor.toString() + "\n");
i++;
}
append("");
return true;
}
});
}}), BorderLayout.CENTER);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JDragDropTest();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
从 Google Chrome 拖动时,我得到 131 种风格的输出,没有图像。
其中一些具有 InputStream
的表示类,我正在阅读其中一些并获得一些文本,如 IMG SRC=
。
从 Internet Explorer 拖动时,我得到一个空列表。
尝试从 Firefox 拖动时,我什至无法开始拖动。
操作系统是 Window 8.1 教授。
我想获取图片本身,而不是它的 URL,也不是它的 IMG 标签。这可能吗?
最佳答案
这是我的尝试(未经过充分测试):
- 我只测试
Windows 7
、JDK 1.8.0_51
、FireFox 39.0
、Chrome 45.0
、stackoverflow 配置文件图标
。
import java.awt.*;
import java.awt.datatransfer.*;
import java.io.*;
import java.util.List;
import javax.swing.*;
public class JDragDropTest2 {
public JComponent makeUI() {
final JLabel label = new JLabel("Drop here image from a web browser");
label.setTransferHandler(new TransferHandler() {
@Override public boolean canImport(JComponent component, DataFlavor[] flavors) {
return true;
}
@Override public boolean importData(JComponent component, Transferable transferable) {
label.setText("");
try {
for (DataFlavor flavor : transferable.getTransferDataFlavors()) {
System.out.println(flavor);
if (DataFlavor.imageFlavor.equals(flavor)) {
Object o = transferable.getTransferData(DataFlavor.imageFlavor);
if (o instanceof Image) {
label.setIcon(new ImageIcon((Image) o));
return true;
}
}
if (DataFlavor.javaFileListFlavor.equals(flavor)) {
Object o = transferable.getTransferData(DataFlavor.javaFileListFlavor);
if (o instanceof List) {
List list = (List) o;
for (Object f : list) {
if (f instanceof File) {
File file = (File) f;
System.out.println(file);
if (!file.getName().endsWith(".bmp")) {
label.setIcon(new ImageIcon(file.getAbsolutePath()));
return true;
}
}
}
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return false;
}
@Override public int getSourceActions(JComponent component) {
return COPY;
}
});
return new JScrollPane(label);
}
public static void main(String... args) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
createAndShowGUI();
}
});
}
public static void createAndShowGUI() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().add(new JDragDropTest2().makeUI());
frame.setSize(320, 240);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
关于java - 如何在 Java Swing 中拖放从 Web 浏览器接收图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31653353/