如何在 Jetpack Compose Desktop 中实现窗口间 DND(拖放)?

问题描述 投票:0回答:1

我知道我可以使用 Swing 和 AWT 与 Jetpack Compose Desktop 来尝试实现它,但我从未使用过它们,只想使用 Jetpack Compose 元素(选项卡的设计)。

你至少能帮我找到一些想法吗?

我还发现了一个,它添加了拖放功能,但它似乎只能在一个窗口中使用。对于几个窗口,看来我需要使用Swing的DropTarget。

kotlin kotlin-multiplatform compose-multiplatform compose-desktop jetbrains-compose
1个回答
0
投票

使用CMP 1.7.0,现在也可以在桌面上使用

Modifier.dragAndDropTarget()

要执行相反的操作(作为拖放的来源),请参阅这篇文章

var isDragging by remember { mutableStateOf(false) }
val dragAndDropTarget = remember {
    object : DragAndDropTarget {
        override fun onEntered(event: DragAndDropEvent) {
            isDragging = true
        }

        override fun onExited(event: DragAndDropEvent) {
            isDragging = false
        }

        override fun onDrop(event: DragAndDropEvent): Boolean {
            isDragging = false
            (event.dragData() as? FilesList)
                ?.readFiles()
                ?.first()
                ?.let(::URI)
                ?.let(URI::toPath)
                ?.let(::println)
                ?: return false
            return true
        }
    }
}

Box(modifier = Modifier
    .size(200.dp)
    .background(if(isDragging) Color.Red else Color.LightGray)
    .dragAndDropTarget(
        shouldStartDragAndDrop = { true },
        target = dragAndDropTarget
    )
)

代码的灵感来自于此拉取请求中的示例

© www.soinside.com 2019 - 2024. All rights reserved.