我正在尝试将多行(不连续)从 jtable 拖动到 jtree。我正在使用定制的可转移对象和定制的转移处理程序。
getTransferData(DataFlavor df)
但是,我在 import data 方法中丢失了我的对象,因为它在 class中的 java 方法中丢失了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
cObject 类是可序列化的。自定义的传输处理程序被声明为面板中的内部类,其中包含树和表。*/
class ObjectTreeTransferHandler extends TransferHandler{
/*the createTransferable method successfully creates the transfer object */
@Override
public boolean importData(TransferSupport support) {
if (!canImport(support)) {
return false;
}
if (support.isDataFlavorSupported(cObjectList.OBJECT_LIST_FLAVOR)) {
cObjectList obList = null;
try {
Transferable t = support.getTransferable();
obList = (cObjectList) t.getTransferData(cObjectList.OBJECT_LIST_FLAVOR);
} catch (UnsupportedFlavorException ufe) {
System.out.println("UnsupportedFlavor: " + ufe.getMessage());
return false;
} catch (java.io.IOException ioe) {
new myException(ioe);
return false;
}
if (obList != null && support.getComponent() instanceof myJTree) {
//do work
}//end if
}//end inner class ObjectTreeTransferHandler
可转移对象t
正确包含数组列表中的对象,但是当我调用 时t.getTransferData
,数组列表会返回null
对象。例如,如果从表中选择了三行,这会调用getTransferData
方法,在cObjectList
该方法中正确地返回数组列表中的这些对象,但是当它到达getTransferDat
DropTargetContext.java 中的 a 时,null
即使列表/对象本身仍然显示,数组列表中的值也会返回size =3
。
为树选择的放置模式是:
treeObjectStructure.setTransferHandler(new ObjectTreeTransferHandler()); treeObjectStructure.setDropMode(DropMode.ON_OR_INSERT);
谁能帮我弄清楚我做错了什么?