簡體   English   中英

Transferhandler中的getTransferData()無法按預期方式在jtree中多次刪除多個對象

[英]getTransferData() in Transferhandler not working as expected for multiple dropping multiple objects in jtree

我試圖將多行(不連續的)從jtable拖到jtree。 我正在使用自定義的可轉移對象和自定義的轉移處理程序。

但是,我在導入數據方法中丟失了對象,因為它在DropTargetContext.java類的java方法getTransferData(DataFlavor df)丟失了。

代碼如下:

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對象。 例如,如果從表中選擇了三行,這將調用cObjectList中的getTransferData方法,該方法正確地返回了arraylist中的這些對象,但是當到達DropTargetContext.java中的getTransferDat a時,即使列表/對象本身也返回了null仍顯示size =3

為樹選擇的放置模式是:

treeObjectStructure.setTransferHandler(new ObjectTreeTransferHandler()); treeObjectStructure.setDropMode(DropMode.ON_OR_INSERT);

誰能幫我弄清楚我做錯了什么?

我支持上面的答案。 我有同樣的問題,我只是用萊爾說的來解決:

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);
  }
 }

我有一個類似的問題,結果證明DataFlavor構造函數的第一個參數必須是Object.class。 如果它是myclass.class,那么我也從getTransferData返回null,並拋出IOException。 我不知道為什么會這樣。 我花了幾個小時才確定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM