【发布时间】:2012-01-26 07:41:57
【问题描述】:
我想将JList 的“drop”事件委托给它的父级 (JPanel) 并删除在 JList 上的拖放视觉反馈。
这样做的正确方法是什么?
我正在尝试创建一个 DropTarget 对象并在 JPanel 和 JList 之间共享它,但这似乎有点 hackish --- 我无法弄清楚 DropTarget.getComponent() 应该做什么,并担心它可能会破坏东西.
您能否建议正确的方法(在 Java 6 中)?
编辑: *我为什么要这样做?*
我试图让用户将项目分组(一个 JPanel + 一个 JList = 一个组)-当项目时,列表顺序将不会保留(并且由于某些内部数据结构而无法保留)被丢弃在JList。
JList 的默认视觉反馈是一个类似行的光标提示它将被添加到哪里。如果我使用默认值,当用户发现项目被添加到列表末尾时,用户会感到困惑,而不是光标显示的位置。
为了使视觉反馈看起来更容易,我在 JPanel 级别上进行操作(一个 JPanel 对应一个 JList,列表上的一些半透明覆盖层等等)。自然,拖放到该 JPanel 也应该添加到列表中。所以....
【问题讨论】:
-
“这样做的正确方法是什么?” 嗯.. 不要这样做,因为它不是“最少的路径”给最终用户带来惊喜?
-
@AndrewThompson 事实上,我这样做是为了减少惊喜。查看更新后的问题。
-
不要以为这很奇怪,这就是 f.i. win文件资源管理器:将一个目录从树中拖到另一个目录的文件列表视图中,当超过一个文件时,会显示一条指示当前插入位置的黑线,但在拖放时会根据排序顺序插入该目录
-
我同意@kleopatra。我认为典型的文件浏览器默认选择插入的文件以可视化向用户显示它放置的位置,因为实际位置与放置位置不同。好东西,否则我的文件夹都没有按字母顺序排列的文件,我再也找不到任何东西了
-
@kleopatra,你在winxp中试过了吗?这里的资源管理器没有显示“黑线”,它从不插入排序顺序——它只是将它添加到列表的末尾。
标签: java swing drag-and-drop droptarget