我有一个包含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吗?
答案 0 :(得分:0)
如果你的JList使用Strings作为类型声明,那么你可以简单地使用stringFlavor作为默认的DataFlavor,如下所示:
public boolean canImport(TransferSupport support) {
return support.isDataFlavorSupported(DataFlavor.stringFlavor);
}
如果您使用Class objects,那么我建议您实现自己的Transferable来创建上面显示的DataFlavor,因为人类可读的字符串部分对于非库存风格完全是任意的。