java - 从单列(不是整行)拖放行

标签 java swing jtable

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

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

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

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

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

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

最佳答案

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

关于java - 从单列(不是整行)拖放行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18038435/

相关文章:

java - 为什么jdk中的exe有2个bin?

java - jtable 单元格渲染器在运行时更改单元格的背景颜色

java - 在 jbutton 中排序图像和文本

java - 动态调整按钮大小

java - 在构造函数中调用另一个类的非静态方法

java - 当数组未满时如何比较字符与数组

java - 404错误的解决方法 使用带有json的restful web services

java - Beans 在 NetBeans 中绑定(bind) JTable

java - 带有动态 JPopupMenu 的 JTable

java - 有 2 个 if 语句的表渲染器