gpt4 book ai didi

java - 如何设置组件的DataFlavor?

转载 作者:行者123 更新时间:2023-12-01 09:17:46 25 4
gpt4 key购买 nike

我不太确定我是否正确理解了 DataFlavor 的原理,但是我如何实际设置 JComponent 的 DataFlavor?每次我调用 getDataFlavor 方法时,输出都是这样的:

java.awt.datatransfer.DataFlavor[mimetype=application/x-java-file-list;representationclass=java.util.List]

我的问题是,我想将图像从桌面或任何其他位置直接拖到我的 JPanel 中。它通过 DataFlavor.javaFileListFlavor 工作,但是我有没有办法创建一个只接受 PNG 和 JPG 文件的自定义 flavor ?(我知道实际上可以创建自定义 flavor ,但我不知道如何为我的组件“启用”新创建的 flavor )

或者有没有办法用javaFileListFlavor来确定拖入的Item是PNG还是JPG?

我希望我能很好地解释我的问题(我不是这门语言的大师,但我正在尽力;))

最佳答案

Or is there a way to ensure whether the dragged in Item is a PNG or JPG with the javaFileListFlavor?

查看 Top Level Drop 上的 Swing 教程。它展示了如何将文件从桌面拖动到 JTextArea。

看一下 TransferHandlercanImport(...)importData(...) 方法。 canImport(...) 方法当前仅检查您是否具有 FileListFlavor。因此,您需要添加额外的逻辑来查看实际文件是 PNG 或 JPG。

如果您查看 importData(...) 方法,您可以了解如何从 TransferSupport 对象获取 File 对象,以便可以实现上述检查。

编辑:

but as described the Exception pops up

我只是忽略异常。以下是本教程的修改代码,仅允许您将“.java”文件复制到文本区域。

private TransferHandler handler = new TransferHandler() {
public boolean canImport(TransferHandler.TransferSupport support) {
if (!support.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
return false;
}

Transferable t = support.getTransferable();

try
{
java.util.List<File> l = (java.util.List<File>)t.getTransferData(DataFlavor.javaFileListFlavor);
File file = l.get(0);
String fileName = file.getName();

if (!file.getName().endsWith(".java"))
return false;
}
catch (Exception e)
{
// ignore
}

if (copyItem.isSelected()) {
boolean copySupported = (COPY & support.getSourceDropActions()) == COPY;

if (!copySupported) {
return false;
}

support.setDropAction(COPY);
}

return true;
}

我在 Windows 7 上使用 JDK8 工作得很好。

关于java - 如何设置组件的DataFlavor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40412875/

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