设置放置 Pattern

在列表等组件上启用放置时,需要决定如何解释放置位置。例如,是否要限制用户替换现有条目?您是否只允许添加或插入新条目?您要允许两者吗?要配置此行为,JList类提供了setDropMode方法,该方法支持以下放置 Pattern。

  • JList的默认放置 Pattern 是DropMode.USE_SELECTION。在此 Pattern 下拖动时,列表中的选定项目将移动以呼应潜在的下降点。在放置上,所选项目将移动到放置位置。提供此 Pattern 是为了向后兼容,否则不建议使用。

  • DropMode.ON中,列表中的所选项目移动以呼应潜在的放置点,但是所选项目在放置上不受影响。此 Pattern 可用于放置在现有列表项的顶部。

  • DropMode.INSERT中,用户只能选择现有列表项之间,列表中第一项之前或最后一项之后的空间。不允许选择现有列表项。

  • DropMode.ON_OR_INSERTONINSERTPattern 的组合。

JTree类提供相同的drop modes集,而JTable类具有several more特定于添加行或列。

为了获得放置位置,TransferSupport类提供了getDropLocation方法,该方法返回发生放置的精确点。但是对于列表组件,放置索引比像素位置更有用,因此JList提供了一个特殊的子类JList.DropLocation。此类提供getIndexisInsert方法,可以为您处理 math。

表格,树和文本组件各自提供DropLocation的实现,并使用对每个组件最有意义的方法。 JTable.setDropMode方法具有最多的选择。下表显示了所有四个类的方法:

  • JList,JTree,JTable 和 JTextComponent 的 DropLocation 方法*
JList.DropLocationJTree.DropLocationJTable.DropLocationJTextComponent.DropLocation
isInsertgetChildIndexisInsertRowgetIndex
getIndexgetPathisInsertColumngetBias
getRow
getColumn

接下来是一个演示,该演示为列表组件实现了自定义传输处理程序,从而使其完全参与拖放操作。