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