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