空表下降
原文: https://docs.oracle.com/javase/tutorial/uiswing/dnd/emptytable.html
拖放到空表中是一项独特的挑战。坚持正确的步骤:
- 创建空表。
- 创建并附加
TransferHandler
。 - 通过调用
setDragEnabled(true)
启用数据传输。 - 创建滚动窗格并将表添加到滚动窗格。
您运行该应用程序并尝试将有效数据拖到表中但它拒绝丢弃。是什么赋予了?
原因是空表(与空列表或空树不同)不占用滚动窗格中的任何空间。 JTable
不会自动伸展以填充JScrollPane
视口的高度 - 它只占用所包含行所需的垂直空间。因此,当您拖动空表时,实际上并不在表上,并且删除失败。
您可以通过调用 JTable.setFillsViewportHeight(boolean)
将表配置为允许丢弃视图端口中的任何位置。此属性的默认值为 false,以确保向后兼容性。
以下示例FillViewportHeightDemo
允许您尝试删除到空表。该演示包含一个包含五列的空表,其下拉模式设置为插入行,一个拖动源提供五个以逗号分隔的自动增量值。
Try this:
单击启动按钮以使用 Java™Web Start (下载 JDK 7 或更高版本)运行
FillViewportHeightDemo
。或者,要自己编译并运行示例,请参考示例索引。从标记为“从此处拖动”的文本字段拖动到表中。
- 掉到桌子上。下降被拒绝。
- 双击拖动源。它将当前值(0,0,0,0,0)存入表中,并递增文本字段中的值。
- 再次,从文本字段拖动到表。您可以在行的上方或下方插入,但不能插入下方的区域。
- 从“选项”菜单中,选择“填充视口高度”以启用“fillsViewportHeight”属性。
- 从“选项”菜单中,选择“重置”以清空表格。
- 从文本组件拖动到表。您现在可以删除视图端口上的任何位置,并在第 0 行插入数据。
您可以检查 FillViewportHeightDemo.java
的来源,但要记住的主要一点是,您通常应该在任何接受删除数据的表上调用setFillsViewportHeight(true)
。