0

Java クラスのリストを含む JList があります。クラスをこの JList から別の JList にドラッグしたいのですが、DataFlavors を使用してインポート可能なドロップを識別する方法について少し混乱しています。

   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 の実装に使用できる適切なデータ フレーバーはありますか?

4

1 に答える 1

0

JList が Strings を型宣言として使用している場合は、次のように単純に stringFlavor をデフォルトの DataFlavor として使用できます。

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

ただし、 Class オブジェクトを使用する場合は、独自のTransferableを実装して上記の DataFlavor を作成することをお勧めします。これは、人間が読める文字列部分がストック以外のフレーバーに対して完全に任意であるためです。

于 2013-05-17T09:17:08.333 に答える