【发布时间】:2013-04-30 15:39:54
【问题描述】:
首先,我只想承认我并不是最敏锐的 Java 开发人员。我的优势/经验主要是在 JavaScript 等浏览器中。
有人要求我创建一个可用于将文件拖放到浏览器 (IE7) 中的小程序。那没问题。我使用了来自here 的 FileDrop 类。
所以我们即将上线,但客户端在向用户池展示应用程序后决定,应用程序需要能够将文件拖出界面并拖入 Windows 资源管理器/桌面等。那种东西。
UI 的设置方式是它们在右侧的内容窗格中有一个文件列表,在左侧有一个导航区域 - 目录树等,当用户单击时,他们会得到一个内容区域中的文件列表。当用户单击并按住鼠标时,小程序最终会与它下载的文件一起出现,并且用户单击以将该文件拖出界面并拖入 UI 中的另一个放置目标或拖出到 Windows 资源管理器等。
这是来自小程序的一些代码:
public MyFileDrop() {
panel = new JPanel();
panel.setLayout(new GridBagLayout());
panel.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
panel.setBackground(new Color(245, 245, 245));
JLabel label = new JLabel("+", JLabel.CENTER);
label.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 15));
label.setForeground(Color.gray);
panel.add(label);
DefaultListModel model = new DefaultListModel();
fileList = new JList(model);
fileList.setDragEnabled(true);
fileList.setSize(250, 25);
panel.add(fileList);
panel.addMouseListener(new MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
System.out.println("mouseEntered");
File file = self.getAndSaveLocalFile(self.documentUrl, self.name, self.id);
if (!file.isDirectory())
((DefaultListModel) ((JList) panel.getComponent(1)).getModel()).addElement(file);
}
...
当我将文件拖到 Windows 资源管理器窗口时,它会给我一个圆圈斜线图像(即,就像没有香烟的“禁止吸烟”)。它也不会被放入 UI 上的目标中。我已经 sysouted 文件的 .getCannonicalPath() ,一切似乎都指向我正在拖出文件的概念,但系统似乎没有认识到这一点。我看过这个问题:
DragNDrop from Java to Windows Explorer
但是我使用的是 JList 的内置拖放功能,我不知道如何更改 mimetype。我需要编写自己的 TransferHandler 吗?如果有,具体需要做什么?
【问题讨论】:
-
还有..你的问题是什么?
-
按
ctrl-f并输入?字符,根据您使用的浏览器,您可能需要也可能不需要按enter。或者,滚动到帖子底部并阅读最后两句话。
标签: java swing drag-and-drop applet awt