当前位置: 首页 > 知识库问答 >
问题:

将图像拖到窗口外以使用Java创建文件

公良文彬
2023-03-14

您在下面看到的图像是PDF的BuffereImage表示。BuffereImage位于jlabel中包含的imageicon中。

我在这里试图做的是能够将该图像拖到我系统中的另一个应用程序中。如果我将任何文档(包括图像)拖到该应用程序中,它就会接受它。我需要将其作为PDF拖放到该应用程序中。我正在使用PDFBOX来帮助操作PDF。我的最终用户必须将其实现为拖放。另一个将接受这些文档的应用程序的编写方式是,一旦文档在系统中就无法删除,因此拖放是最好的方式。

但是,因为图像包含在jtag中,所以我无法将其拖出,或者至少我找不到这样做的方法。我可以拖入jtag,但拖出似乎不是一个选项。

这是我第一次尝试在我的应用程序中内置拖放功能,我只能看到将文件url拖到桌面上的能力。有什么方法可以让我把这个(url或其他)从窗口拖到桌面上吗?我在想,如果我能把它放到桌面上,我就能把它放到另一个应用程序中。

我可以将文件暂时保存为PDF格式,我相信我必须这样做,但我只是不知道如何从JLabel中获取此文件。非常感谢您的帮助。

共有1个答案

葛高澹
2023-03-14

我的设计是错误的,这就是为什么DnD不工作。在我的设置中,上面的图像包含在一个ImageIcon中,该图标本身包含在一个JLabel中。拖动JLabel内容的编码成为了一个问题,因为默认情况下JLabel没有设置为拖出(或者您根本无法这样做)。

当我更改设置,使我的图像位于JList中包含的ImageIcon中时,设置变得相当简单。我的另一个应用程序可以采用任何风格,但具体来说,我需要一个PDF。

为此,包含Jlist的JFrame必须实现DragDropListener(显然)。魔法代码在FileTransferHandler类中:

private class FileTransferHandler extends TransferHandler {
    @Override
    protected Transferable createTransferable(JComponent c) {
        List<File> files = new ArrayList<>();
        files.add(currentPDF.getFile());
        return new FileTransferable(files);
    }
    @Override
    public int getSourceActions(JComponent c) {
        return MOVE;
    }        
}

-

private class FileTransferable implements Transferable {

    private final List<File> files;

    public FileTransferable(List<File> files) {
        this.files = files;
    }
    @Override
    public DataFlavor[] getTransferDataFlavors() {
        return new DataFlavor[]{DataFlavor.javaFileListFlavor};
    }
    @Override
    public boolean isDataFlavorSupported(DataFlavor flavor) {
        return flavor.equals(DataFlavor.javaFileListFlavor);
    }
    @Override
    public Object getTransferData(DataFlavor flavor)
            throws UnsupportedFlavorException, IOException {
        if (!isDataFlavorSupported(flavor)) {
            throw new UnsupportedFlavorException(flavor);
        }
        return files;
    }
}   

<代码>当前PDF。getFile()是一种写入我的PDF对象的方法,它将返回一个最终文件,其中包含将被拖到其他应用程序中的内容。如果将来需要,我可以选择一次传输多个文件,因此使用了ArrayList。

 类似资料:
  • 本文向大家介绍使用OpenGL创建窗口 C ++,包括了使用OpenGL创建窗口 C ++的使用技巧和注意事项,需要的朋友参考一下 在OpenGL上制作任何程序的基本步骤是创建一个窗口,所有代码都将在其中工作,因此我们如何创建它?在您的机器上安装OpenGL库之后(Ubuntu的OpenGL安装指南:如何在Ubuntu中安装OpenGL),我们可以开始了。 首先让我们了解如何构建OpenGL程序吗

  • 我正在尝试创建一个具有文本和透明背景的图像文件。 我使用了这个命令: 但它并没有给我创造任何东西,我收到了以下错误/消息:

  • 译注 注意,由于作者对教程做出了更新,之前本节使用的是GLEW库,但现在改为了使用GLAD库,关于GLEW配置的部分现在已经被修改,但我仍决定将这部分教程保留起来,放到一个历史存档中,如果有需要的话可以到这里来查看。 在我们画出出色的效果之前,首先要做的就是创建一个OpenGL上下文(Context)和一个用于显示的窗口。然而,这些操作在每个系统上都是不一样的,OpenGL有目的地从这些操作抽象(

  • 我有一个双重形象,我的目标是把它转换成逻辑。我想创建5x5窗口,并把它放在图像中的每个像素上。然后,我计算这25个像素的平均值。如果中心像素值大于平均值,则为1。否则为0。 我怎么能那样做? 附注。我不想这样做:

  • 问题内容: 我现在可以编译ffmpeg并将其添加到项目创建的Android.mk文件的jni文件夹中,我想使用ffmpeg从存储在静态arraylist中的图像创建视频文件 我已经搜索了很多,但找不到任何教程,对此表示感谢。 问题答案: 我也有类似的需求,并且达到了相同的目的。您可以通过两种方式执行此操作。我想先分享一个简单的例子。 在Android内部创建一个临时文件夹。 将图像复制到新文件夹中

  • 通过对第 5 章的学习,我们已经了解了 Qt Designer 及其组件的基本用法。Qt Designer 提供了许多预定义模板,使用它可以创建多种不同的用户界面。使用 Qt Designer 创建主窗口是非常快捷的,使用其中的 【templates\forms】→【Main Window】就可以完成主窗口类型应用程序界面的设计,主要包括菜单栏、工具栏以及锚接窗口部件的 设定,这其中锚接窗口部件不