gpt4 book ai didi

java - 如何在 Java Swing 中拖放从 Web 浏览器接收图像?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:58:19 24 4
gpt4 key购买 nike

我正在尝试通过拖放从网络浏览器接收图像,但失败了:

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 7JDK 1.8.0_51FireFox 39.0Chrome 45.0stackoverflow 配置文件图标

enter image description here

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com