基于this post我已经实现了一个方便的功能来拖放JTable中的行来重新排序它们。然而,该功能附加到整个表格,我只想将它附加到一列(显示为图标),以便鼠标事件不会受到其他列的影响。
整行将被拖动/重新排序,但我想使用专门的图标作为'手柄'用于拖动,它将出现在最左侧或最右侧的列中。我之前已经看过这个概念(不是在java中),但现在找不到合适的例子。
目前,拖动处理程序安装如下:
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setDragEnabled(true);
table.setDropMode(DropMode.INSERT_ROWS);
table.setTransferHandler(new ReorderRowTransferHandler(table));
有没有办法将拖动处理程序仅附加到单个列?
编辑:@ Kleopatra的答案很好,但是我的问题的一部分是我的其他专栏包含按钮等组成部分,由于拖动处理程序,不再显示他们的按下'州。我希望找到一个限制拖动鼠标处理程序的解决方案,以便它影响第一列。答案 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);
}