Java 从单个列(不是整行)拖放行

Java 从单个列(不是整行)拖放行,java,swing,jtable,Java,Swing,Jtable,基于JTable,我实现了一个方便的特性,可以在JTable中拖放行以重新排序。但是,该功能附加到整个表中,我只想将其附加到一列(显示为图标),这样其他列中的鼠标事件就不会受到影响 整行将被拖动/重新排序,但是我想使用一个专门的图标作为拖动的“句柄”,它将出现在最左边或最右边的列中。我以前见过这个概念(不是java),但现在找不到合适的例子 当前,拖动处理程序的安装方式如下: table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

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

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

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

table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setDragEnabled(true);
table.setDropMode(DropMode.INSERT_ROWS);
table.setTransferHandler(new ReorderRowTransferHandler(table));
有没有办法只将拖动处理程序附加到单个列


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

要仅在表的(f.i.)第一列中启动鼠标拖动时才启动dnd,请实现自定义TransferHandler的exportAsDrag方法,以便在别处不返回任何内容,例如:

@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);
}

或者,考虑一个组合编辑器来选择一个行所需的图标。所以你想移动一个单元格吗?@ MaldCudioNo。我想移动整个行,但不能让整个行在启动拖动方面起作用。因此,在最左边(或最右边)列中会有一个图标,它将是拖动的“句柄”。仍然不完全确定您的问题是什么,如果我的答案不合适,请评论:-)我相当确定TableUI中的表格自动拖动行为将被绑定。。。我可能需要考虑将一个自定义鼠标侦听器附加到表中,然后从表中手动启动拖动…+1,这“起作用”,因为只有指定的列才能启动拖动。。然而,我寻找解决方案的部分原因是,由于拖动处理程序,其他列现在的行为略有不同(按钮列不显示其“按下”状态)。我希望我能找到一种方法,只改变单拖柱的行为。。。有什么想法吗?@pstanton没有-事实上我并不真正理解你所描述的问题;-)是时候让SSCCE看看你在做什么,以及dragHandler是如何干涉的了,这将是一个巨大的SSCCE!我会看看接下来几天是否有时间。谢谢你的帮助。@pstanton一个大的SSCCE-这本身就是一个矛盾,其中一个s代表小:-)把它精简到最基本的部分,通常最多50-100行就足够了