【问题标题】:dragging classes between two JLists在两个 JList 之间拖动类
【发布时间】:2013-04-14 02:25:27
【问题描述】:

我有一个包含 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?

【问题讨论】:

  • 您能否提供一个可运行的问题示例,这将有助于确定导入/删除需要做什么

标签: java swing drag-and-drop awt


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多