在两个JLists之间拖动类

时间:2013-04-14 02:25:27

标签: java swing drag-and-drop awt

我有一个包含java类列表的JList。我想将一个类从这个JList拖到另一个,但我对如何使用DataFlavor识别可导入的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吗?

1 个答案:

答案 0 :(得分:0)

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

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

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