【问题标题】:Drag and Drop: Trying to understand DropDemo tutorial拖放:试图理解 DropDemo 教程
【发布时间】:2016-04-20 11:15:36
【问题描述】:

我现在正在研究拖放,我在 Oracle 的网站上找到了关于自定义 TransferHandlers 等的有趣教程等等。无论如何,我一直在盯着自定义处理程序的源代码在他们提供的 DropDemo 程序中,这让我抓狂。

让我感到困惑的是,似乎有一大堆方法没有被调用:importData()、importString() 和 exportDone()。它们似乎都具有重要的功能,并且都必须在某个时候触发,但我似乎无法看到这些方法在程序中的哪个位置被调用。

我最终试图了解 DropDemo 如何提供通过拖放重新排序 JList 的能力,因为到目前为止我无法复制这一点。然而,这已经演变成我更大的问题。

【问题讨论】:

    标签: java swing drag-and-drop


    【解决方案1】:

    Transferable#importData(TransferHandler.TransferSupport)

    导致从剪贴板或拖放发生传输 手术。要导入的 Transferable 和要导入的组件 转移到包含在 TransferSupport 中。

    虽然拖动 并删除实现调用 canImport 以确定适用性 调用此方法之前的一次调用,执行粘贴 才不是。因此,不能假设转移是 在调用此方法进行粘贴时可以接受。推荐 canImport 被显式调用来覆盖这种情况。

    注意:传递给此方法的 TransferSupport 对象仅有效 在方法调用期间。未定义它的价值 此方法返回后可能包含。

    基本上,当与Transferable 关联的组件检测到“导入”事件时,就会调用它。这是Transferable 根据其要求从TransferHandler.TransferSupport 物理导入数据的机会

    Transferable#exportDone

    数据导出后调用。此方法应删除 如果动作为 MOVE,则传输的数据。

    此方法是 由于 MOVE 不支持此操作,因此什么也不做 实现(getSourceActions 不包括 MOVE)。

    这在启动导出过程的Transferable 实例上调用,告诉它传输的接收者采取了什么行动,以便它可以采取适当的行动

    需要注意的是,并非所有方法都必须调用,例如,如果您正在导出数据,那么您将不会收到importData 方法的通知。同样,如果传输从未成功完成,则exportDone 可能不会被调用。

    这些方法由核心 D'n'D 子系统触发,Transferable API 位于其之上,并为响应较低级别的事件而完成。您实际上并不需要“知道”它们是如何被调用的,但需要知道“何时”调用它们时要做什么。这更像是事件驱动程序的“黑魔法”。

    我最终试图了解 DropDemo 如何提供通过拖放重新排序 JList 的能力,因为到目前为止我无法复制这一点。然而,这已经演变成我更大的问题。所以提前谢谢。

    For example

    【讨论】:

    • 完成... 但是,不要迂腐,但问题不是答案。你的答案仍然会被采纳。继续前进。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多