这些Java教程是为JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
有关Java SE 9及以后版本中更新的语言特性的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能和已删除或已弃用选项的信息,请参阅JDK发行说明。
数据传输机制的核心是 TransferHandler
类。正如其名称所示,TransferHandler
提供了一个简单的机制,用于在 JComponent
之间传输数据 - 所有的细节都包含在这个类及其支持类中。大多数组件都提供了一个默认的传输处理程序。您可以在任何组件上创建和安装自己的传输处理程序。
有三种方法用于在组件上使用 TransferHandler
:
setDragEnabled(boolean)
— 启用拖动支持。(默认值为 false。)此方法在每个支持拖动手势的组件上定义;链接将带您到 JList
的文档。setDropMode(DropMode)
— 配置如何确定放置位置。此方法在 JList
、JTable
和 JTree
上定义;链接将带您到 JList
的文档。setTransferHandler(TransferHandler)
— 用于插入自定义数据导入和导出。此方法在 JComponent
上定义,因此它被每个 Swing 组件继承。正如前面提到的,Swing 的默认传输处理程序(例如文本组件和颜色选择器使用的处理程序)提供了被认为对于数据的导入和导出最有用的支持。然而,列表、表格和树不会默认支持放置。原因是这些组件没有通用的处理放置的方式。例如,在 JTree
的特定节点上放置意味着什么?是替换该节点,插入到该节点下方,还是作为该节点的子节点插入?而且,我们不知道树后面是什么类型的模型 - 它可能是不可变的。
虽然 Swing 不能为这些组件提供默认实现,但放置的框架已经存在。您只需要提供一个自定义的 TransferHandler
来管理实际的数据导入。
如果将自定义的 TransferHandler
安装到 Swing 组件上,将替换默认的支持。例如,如果用处理颜色的处理程序替换了 JTextField
的 TransferHandler
,将禁用其支持文本的导入和导出能力。
如果必须替换默认的 TransferHandler
- 例如,处理文本的处理程序 - 您需要重新实现文本的导入和导出能力。这不需要像 Swing 提供的那样复杂 - 根据您的应用程序需求,它可以简单地支持 StringFlavor
数据类型。
接下来,我们将展示实现数据导出所需的 TransferHandler
方法。