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

时间:2013-08-03 23:52:11

标签: java swing jtable

基于this post我已经实现了一个方便的功能来拖放JTable中的行来重新排序它们。然而,该功能附加到整个表格,我只想将它附加到一列(显示为图标),以便鼠标事件不会受到其他列的影响。

整行将被拖动/重新排序,但我想使用专门的图标作为'手柄'用于拖动,它将出现在最左侧或最右侧的列中。我之前已经看过这个概念(不是在java中),但现在找不到合适的例子。

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

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

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

编辑:@ Kleopatra的答案很好,但是我的问题的一部分是我的其他专栏包含按钮等组成部分,由于拖动处理程序,不再显示他们的按下'州。我希望找到一个限制拖动鼠标处理程序的解决方案,以便它影响第一列。

1 个答案:

答案 0 :(得分:2)

要仅在表的第一列(f.i.)中启动鼠标拖动时启动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);
}