0

基于这篇文章,我实现了一个方便的功能,可以在 JTable 中拖放行以重新排序。但是,该功能附加到整个表格,我只想将其附加到一列(显示为图标),以便鼠标事件不会在其他列中受到影响。

整行将被拖动/重新排序,但是我想使用一个专门的图标作为拖动的“手柄”,它会出现在最左边或最右边的列中。我以前见过这个概念(不是在 java 中),但现在找不到合适的例子。

目前,拖动处理程序的安装方式如下:

table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setDragEnabled(true);
table.setDropMode(DropMode.INSERT_ROWS);
table.setTransferHandler(new ReorderRowTransferHandler(table));

有没有办法将拖动处理程序仅附加到单个列?

编辑:@Kleopatra 的回答很好,但是我的部分问题是我的其他列包含组件,例如由于拖动处理程序而不再显示其“按下”状态的按钮。我希望找到一个限制拖动鼠标处理程序的解决方案,以便它影响第一列。

4

1 回答 1

2

要仅在 (fi) 表的第一列中启动鼠标拖动时启动 dnd,请实现自定义 TransferHandler 的 exportAsDrag 方法以在其他地方返回 NONE,例如:

@Override
public void exportAsDrag(JComponent comp, InputEvent e, int action) {
    if (e instanceof MouseEvent) {
        MouseEvent mouse = (MouseEvent) e;
        if (table.columnAtPoint(mouse.getPoint()) != 0) {
            action = NONE;
        }

    }
    super.exportAsDrag(comp, e, action);
}
于 2013-08-04T10:14:40.080 回答