2012-09-19 60 views
4

我使用JTable + JScrollPane + DefaultTableModelDrag-n-Drop JTableHeader

我需要实现Drag-n-Drop JTableHeader。我想拖动列标题到我的组件,并根据拖动的列做一些工作。

我试过setTransferHandler()对我的JTableHeader,但拖动仍然无法正常工作。

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

+1

指定“不工作”:您无法启动拖动(甚至不能移动列),您可以移动列但不拖动组件,您可以拖放,但拖放没有达到您的预期效果,... – Robin

+0

我可以重新排列列但我不能启动拖动(光标不变,鼠标按钮释放时我的组件的拖放方法不会触发) – Afel

+0

您可能会考虑将您的更新作为答案到你的问题(并接受它),更容易找到信号“解决”的未来用户:-) – kleopatra

回答

3

已解决:问题已关闭。 DND符默认的“重排列的行为:我DND使用

DragSource.getDefaultDragSource().createDefaultDragGestureRecognizer(tableHeader, ...) 

一两件事要提的实现。我的解决方法是

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重新排列列。这对我来说已经足够了。

相关问题