Compose for Desktopでウィンドウにドロップされたファイルを取得するには

Compose for Desktopでウィンドウにドロップされたファイルを取得する方法について。

環境

  • Compose for Desktop 1.0.0-alpha3

問題

Compose For Desktopでウィンドウにドロップされたファイルを取得したい。

方法

FrameWindowScopeのwindowはComposeWindowです。
ComposeWindowはjavax.swing.JFrameを継承した、Compose for Desktopのためのウィンドウです。

ComposeWindowがドロップ受け取れるようにDropTargetを関連付け、ドロップされたファイルを受け取ります。

import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.window.singleWindowApplication
import java.awt.datatransfer.DataFlavor
import java.awt.dnd.DnDConstants
import java.awt.dnd.DropTarget
import java.awt.dnd.DropTargetAdapter
import java.awt.dnd.DropTargetDropEvent

fun main() = singleWindowApplication {
    LaunchedEffect(Unit) {
        window.dropTarget = DropTarget().apply {
            addDropTargetListener(object : DropTargetAdapter() {
                override fun drop(event: DropTargetDropEvent) {
                    event.acceptDrop(DnDConstants.ACTION_COPY);
                    val fileName = event.transferable.getTransferData(DataFlavor.javaFileListFlavor)
                    println(fileName)
                }
            })
        }
    }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください