我知道我可以使用 Swing 和 AWT 与 Jetpack Compose Desktop 来尝试实现它,但我从未使用过它们,只想使用 Jetpack Compose 元素(选项卡的设计)。
你至少能帮我找到一些想法吗?
我还发现了一个库,它添加了拖放功能,但它似乎只能在一个窗口中使用。对于几个窗口,看来我需要使用Swing的DropTarget。
使用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
)
)
代码的灵感来自于此拉取请求中的示例。