Java Transferhandler中的getTransferData()无法按预期在jtree中删除多个对象

Java Transferhandler中的getTransferData()无法按预期在jtree中删除多个对象,java,swing,drag-and-drop,jtree,Java,Swing,Drag And Drop,Jtree,我试图将多行(不连续的)从jtable拖到jtree。我正在使用一个定制的可转移对象和一个定制的transferhandler 但是,我在import data方法中丢失了我的对象,因为它在java方法getTransferData(DataFlavor df)类DropTargetContext.java中丢失了 代码如下: public class cObjectList extends ArrayList<cObject> implements Transferable, Se

我试图将多行(不连续的)从jtable拖到jtree。我正在使用一个定制的可转移对象和一个定制的transferhandler

但是,我在import data方法中丢失了我的对象,因为它在java方法
getTransferData(DataFlavor df)
DropTargetContext.java
中丢失了

代码如下:

public class cObjectList extends ArrayList<cObject> implements Transferable, Serializable {    

public static DataFlavor OBJECT_LIST_FLAVOR = new DataFlavor(cObjectList.class, "Object List");
    private DataFlavor flavors[] = { OBJECT_LIST_FLAVOR };

    @Override
    public DataFlavor[] getTransferDataFlavors() {        return flavors;    }//end method  getTransferDataFlavors

@Override
    public boolean isDataFlavorSupported(DataFlavor flavor) {
        return flavor.getRepresentationClass() == cObjectList .class;    }//end method isDataFlavorSupported

@Override
    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
        if (isDataFlavorSupported(flavor)) {  return this; } else { 
throw new UnsupportedFlavorException(flavor);        }//end else
    }//end method getTransferData    
}//end class  cObjectList
可转移对象
t
正确地拥有数组列表中的对象,但是当我调用
t.getTransferData
时,数组列表返回
null
对象。例如,如果从表中选择了三行,这将调用
cObjectList
中的
getTransferData
方法,该方法正确返回arraylist中的这些对象,但当它到达DropTargetContext.java中的
getTransferDat
a时,数组列表中的值返回为
null
,即使列表/对象本身仍然显示
size=3

为树选择的拖放模式为:

setTransferHandler(新的ObjectTreeTransferHandler());treeObjectStructure.setDropMode(DropMode.ON_或_INSERT)


有人能帮我找出我做错了什么吗?

我也遇到了类似的问题,结果是DataFlavor构造函数的第一个参数必须是Object.class。如果是myclass.class,那么我也会从getTransferData返回null,它会抛出一个IOException。我不知道为什么会这样。我花了几个小时来确定这一点。

我也遇到了类似的问题,结果证明DataFlavor构造函数的第一个参数必须是Object.class。如果是myclass.class,那么我也会从getTransferData返回null,它会抛出一个IOException。我不知道为什么会这样。我花了好几个小时才确定这一点。

我对上面的答案投了赞成票。我也有同样的问题,我只是用莱尔说的话解决了它:

class TransferablePanel implements Transferable {
   protected static  DataFlavor PANELFLAVOR = new DataFlavor(Object.class, "A 
   JPanel Object");//instead JPanel.class I used Object.class ****
   protected static DataFlavor[] supportedFlavors = { PANELFLAVOR };
   JPanel panel;
      public TransferablePanel(JPanel panel) {
         this.panel = panel;
      }

     @Override
     public DataFlavor[] getTransferDataFlavors() {
         return supportedFlavors;
     }

     @Override
     public boolean isDataFlavorSupported(DataFlavor flavor) {
         if (flavor.equals(PANELFLAVOR))
              return true;
         return false;
      } 

     @Override
     public Object getTransferData(DataFlavor flavor) throws 
     UnsupportedFlavorException {

if (flavor.equals(PANELFLAVOR)){
    return panel;
}
else
  throw new UnsupportedFlavorException(flavor);
  }
 }

我赞成上面的答案。我也有同样的问题,我只是用莱尔说的话解决了它:

class TransferablePanel implements Transferable {
   protected static  DataFlavor PANELFLAVOR = new DataFlavor(Object.class, "A 
   JPanel Object");//instead JPanel.class I used Object.class ****
   protected static DataFlavor[] supportedFlavors = { PANELFLAVOR };
   JPanel panel;
      public TransferablePanel(JPanel panel) {
         this.panel = panel;
      }

     @Override
     public DataFlavor[] getTransferDataFlavors() {
         return supportedFlavors;
     }

     @Override
     public boolean isDataFlavorSupported(DataFlavor flavor) {
         if (flavor.equals(PANELFLAVOR))
              return true;
         return false;
      } 

     @Override
     public Object getTransferData(DataFlavor flavor) throws 
     UnsupportedFlavorException {

if (flavor.equals(PANELFLAVOR)){
    return panel;
}
else
  throw new UnsupportedFlavorException(flavor);
  }
 }

为了更快地获得更好的帮助,请发布一条消息。为了更快地获得更好的帮助,请发布一条消息。