0

我有一个包含 java 类列表的 JList。我想将一个类从这个 JList 拖到另一个,但我对如何使用 DataFlavors 识别可导入的 drop 有点困惑。

   TransferHandler transferHandler = new TransferHandler("hello") {
        public boolean canImport(TransferHandler.TransferSupport info) {
            try {
                DataFlavor flavor = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType +
           ";class=org.foo.MyClass");
                if (info.isDataFlavorSupported(flavor)) {
                    return true;
                }
            } catch (ClassNotFoundException e) {
                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
            }

            System.out.println("not supported");
            return false;
        }

    };

也许这是不可能的,因为源列表的模型正在从类数组中返回一个对象。这是在搞砸吗?

public Object getElementAt(int index) {
    return _snippetClasses[index];
}

我没有看到任何堆栈跟踪,所以我认为它似乎找到了类(我尝试添加一个错字只是为了验证)。我还尝试查看 TransferSupport 对象的数据风格,但似乎有很多,所以我不知道这意味着什么。

我可以使用适当的数据风格来实现 canImport 吗?

4

1 回答 1

0

如果您的 JList 使用字符串作为类型声明,那么您可以简单地使用 stringFlavor 作为默认 DataFlavor,如下所示:

public boolean canImport(TransferSupport support) {
    return support.isDataFlavorSupported(DataFlavor.stringFlavor);
}

但是,如果您使用Class 对象,那么我建议您实现自己的Transferable来创建上面显示的 DataFlavor,因为人类可读的字符串部分对于非库存风格是完全任意的。

于 2013-05-17T09:17:08.333 回答