我正在调试一个独立的 Java 应用程序,该应用程序支持将文件从程序外部(比如操作系统的本机文件管理器)拖放到应用程序上。这一切都经过测试和工作;我们有一个 JList 接受放置动作并表现得适当。
当您开始拖动文件时,某些平台(尤其是 Windows 7+)会在鼠标光标上放置一些有用的文本标签。例如,在Win7中拖动文件默认为“移动”,然后按住Control键切换到“复制”,按住Shift+Control切换到“链接”等,所有这些都在您释放鼠标按钮之前完成。
有人指出,这些标签在我们的案例中有点误导,因为我们的应用程序实际上并没有移动、复制或对文件执行任何此类操作。显然,我们不能影响标签,因为用户仍在将文件拖到监视器周围的任意位置,但我们希望在拖动鼠标进入应用程序后替换标签。到那时,我们的TransferHandler.canImport()
例行程序正在启动。
我读过的 Swing 文档中没有任何内容表明这是可能的,但这些都是非常通用和高级的。这些标签可以被拖到的应用程序覆盖吗?(鉴于我们 90% 的用户群都在 Windows 上,我们愿意接受仅限 Windows 的解决方案;其他平台只能看到“移动”标签或其他任何东西。)
当鼠标到达应用程序时,我简要地查看了当前的 java.awt.Cursor,即使光标上有一堆拖动的文件并且标签“移动”挂在底部,它仍然是默认光标。