【问题标题】:Drag-n-Drop JTableHeader拖放 JTableHeader
【发布时间】:2012-09-19 06:10:54
【问题描述】:

我正在使用JTable + JScrollPane + DefaultTableModel。

我需要在JTableHeader 上实现拖放。我想将列标题拖到我的组件中,并根据拖动的列做一些工作。

我已经在JTableHeader 上尝试了setTransferHandler(),但拖动仍然无法正常工作。

我可以从哪里开始?是否可以在JTableHeader 上实现 DnD 并保存“移动列”功能(JTable 中的“开箱即用”可用)?

【问题讨论】:

  • 指定“不工作”:你不能启动拖动(甚至不能移动列),你可以移动列但不能拖放到你的组件上,你可以拖放但拖放是没有达到你的预期,...
  • 我可以重新排列列,但我无法启动拖动(光标没有改变,我的组件的放置方法不会在鼠标按钮释放时触发)
  • 您可以考虑将您的更新作为您问题的答案(并接受它),以便未来用户更容易找到“已解决”信号:-)
  • 谢谢@kleopatra。太糟糕了,我只能在 2 天后接受我自己的答案。稍后会检查它。

标签: java swing jtable drag-and-drop jtableheader


【解决方案1】:

已解决:问题已结束。我已经使用

实现了 dnd
DragSource.getDefaultDragSource().createDefaultDragGestureRecognizer(tableHeader, ...)  

有一点需要提一下:dnd 会破坏默认的“重新排列列”行为。我的解决方法是

    public void dragGestureRecognized(DragGestureEvent dge) {
        if (dge.getDragAction() == DnDConstants.ACTION_COPY)
            return;
        try {
            dge.startDrag(null, new MyTransferable());
        } catch (InvalidDnDOperationException e2) {
            System.out.println(e2);
        }
    }

这样我就可以用 ctrl-pressed 重新排列列。对我来说已经足够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-31
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2020-06-01
    相关资源
    最近更新 更多