JavaのClipboardを使用したデータ転送の実装方法


  1. テキストのコピーとペースト:

以下のコード例は、文字列をClipboardにコピーし、別の場所にペーストする方法を示しています。

import java.awt.*;
import java.awt.datatransfer.*;
public class ClipboardExample {
    public static void main(String[] args) {
        String text = "コピーするテキスト";

        // Clipboardにテキストをコピーする
        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        StringSelection selection = new StringSelection(text);
        clipboard.setContents(selection, null);

        // Clipboardからテキストを取得してペーストする
        Transferable transferable = clipboard.getContents(null);
        if (transferable != null && transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) {
            try {
                String pastedText = (String) transferable.getTransferData(DataFlavor.stringFlavor);
                System.out.println("ペーストされたテキスト: " + pastedText);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
  1. カスタムデータのコピーとペースト:

以下のコード例は、カスタムオブジェクトをClipboardにコピーし、別の場所にペーストする方法を示しています。この場合、カスタムオブジェクトはSerializableインターフェースを実装している必要があります。

import java.awt.*;
import java.awt.datatransfer.*;
import java.io.*;
public class ClipboardExample {
    public static void main(String[] args) {
        CustomObject data = new CustomObject(); // カスタムオブジェクトのインスタンスを作成

        // Clipboardにカスタムオブジェクトをコピーする
        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        CustomTransferable transferable = new CustomTransferable(data);
        clipboard.setContents(transferable, null);

        // Clipboardからカスタムオブジェクトを取得してペーストする
        Transferable pastedData = clipboard.getContents(null);
        if (pastedData != null && pastedData.isDataFlavorSupported(CustomTransferable.CUSTOM_FLAVOR)) {
            try {
                CustomObject pastedObject = (CustomObject) pastedData.getTransferData(CustomTransferable.CUSTOM_FLAVOR);
                // ペーストされたカスタムオブジェクトを使用する処理
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
// カスタムオブジェクトのクラス
class CustomObject implements Serializable {
    // フィールドやメソッドの定義など
}
// カスタムオブジェクトをTransferableに変換するクラス
class CustomTransferable implements Transferable {
    public static final DataFlavor CUSTOM_FLAVOR = new DataFlavor(CustomObject.class, "CustomObject");
    private CustomObject data;

    public CustomTransferable(CustomObject data) {
        this.data = data;
    }

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

    @Override
    public boolean isDataFlavorSupported(DataFlavor flavor) {
        return flavor.equals(CUSTOM_FLAVOR);
    }

    @Override
    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
        if (flavor.equals(CUSTOM_FLAVOR)) {
            return data;
        } else {
            throw new UnsupportedFlavorException(flavor);
        }
    }
}