繁体   English   中英

如何用Java将文件剪切到剪贴板?

[英]How do I cut a file to the clipboard in Java?

我在Java Swing应用程序中使用此代码将文件复制到剪贴板:

final List<File> files = new ArrayList<File>();
// ... code to fill list omitted ... //

Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
    new Transferable() {
        @Override
        public DataFlavor[] getTransferDataFlavors() {
            return new DataFlavor[] { DataFlavor.javaFileListFlavor };
        }

        @Override
        public boolean isDataFlavorSupported(DataFlavor flavor) {
            return DataFlavor.javaFileListFlavor.equals(flavor);
        }

        @Override
        public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
            return files;
        }
    }, null
);

它的工作原理是,我可以转到Windows资源管理器和Ctrl + V并且文件出现(希望它可以在其他操作系统中运行,但未经过测试)。 我也希望实现cut,但我不知道如何让系统知道动作是什么,或者如何获得每个成功复制文件的反馈,以便我可以手动将其从原始位置删除。

如果这不是不可能的,有关我应该如何处理的任何建议? 我希望能够在应用程序中剪切和粘贴(分别与OS Explorer交换文件)。

还有另一篇文章,人们讨论了削减文件的可能性:

使用SWT将文件剪切到剪贴板中

如果你确实需要它,你可以采用丑陋的方式检查是否有办法通过JNI调用来实现这一点,但是你必须为你想要支持的所有平台做到这一点......

使用Swing这有点“可行”。 请参见TransferHandler.exportToClipboard()。 它提供了一个动作。 使用exportToClipboard()的正确方法是调用TransferHandler.getCutAction()然后使用新创建的ActionEvent()调用actionPerformed() - 我使用分配了TransferHandler的JComponent将创建带有所需文件的Transferable放入剪贴板。

但相反的情况是不可能的。 从剪贴板导入无法知道它是剪切还是复制到剪贴板。 TransferHandler.TransferSupport.getDropAction()仅适用于DND操作。

但也许由剪贴板所有者在传输完成后删除文件。 请参见TransferHandler.exportDone()

另见bug http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6673481

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM