设置放置 Pattern
在列表等组件上启用放置时,需要决定如何解释放置位置。例如,是否要限制用户替换现有条目?您是否只允许添加或插入新条目?您要允许两者吗?要配置此行为,JList类提供了setDropMode方法,该方法支持以下放置 Pattern。
-
JList
的默认放置 Pattern 是DropMode.USE_SELECTION
。在此 Pattern 下拖动时,列表中的选定项目将移动以呼应潜在的下降点。在放置上,所选项目将移动到放置位置。提供此 Pattern 是为了向后兼容,否则不建议使用。 -
在
DropMode.ON
中,列表中的所选项目移动以呼应潜在的放置点,但是所选项目在放置上不受影响。此 Pattern 可用于放置在现有列表项的顶部。 -
在
DropMode.INSERT
中,用户只能选择现有列表项之间,列表中第一项之前或最后一项之后的空间。不允许选择现有列表项。 -
DropMode.ON_OR_INSERT
是ON
和INSERT
Pattern 的组合。
JTree
类提供相同的drop modes集,而JTable
类具有several more特定于添加行或列。
为了获得放置位置,TransferSupport
类提供了getDropLocation方法,该方法返回发生放置的精确点。但是对于列表组件,放置索引比像素位置更有用,因此JList
提供了一个特殊的子类JList.DropLocation。此类提供getIndex和isInsert方法,可以为您处理 math。
表格,树和文本组件各自提供DropLocation
的实现,并使用对每个组件最有意义的方法。 JTable.setDropMode方法具有最多的选择。下表显示了所有四个类的方法:
- JList,JTree,JTable 和 JTextComponent 的 DropLocation 方法*
JList.DropLocation | JTree.DropLocation | JTable.DropLocation | JTextComponent.DropLocation |
---|---|---|---|
isInsert | getChildIndex | isInsertRow | getIndex |
getIndex | getPath | isInsertColumn | getBias |
getRow | |||
getColumn |
接下来是一个演示,该演示为列表组件实现了自定义传输处理程序,从而使其完全参与拖放操作。