Java 如何区分导入数据中的复制/移动

Java 如何区分导入数据中的复制/移动,java,swing,drag-and-drop,Java,Swing,Drag And Drop,我需要在拖放或复制/剪切和粘贴复制与移动期间获得动作类型。它是一个Swing应用程序,并且实现了TransferHandle。我需要在操作结束时在importData方法中提供此信息 对于拖放,似乎可以测试getUserDropAction,如下所示 @凌驾 公共布尔输入数据最终传输支持{ ifsupport.isDrop&&support.getUserDropAction==TransferHandler.MOVE{ //拖放、移动 } } …但是如何获取剪切/复制和粘贴的信息?或者有更好的

我需要在拖放或复制/剪切和粘贴复制与移动期间获得动作类型。它是一个Swing应用程序,并且实现了TransferHandle。我需要在操作结束时在importData方法中提供此信息

对于拖放,似乎可以测试getUserDropAction,如下所示

@凌驾 公共布尔输入数据最终传输支持{ ifsupport.isDrop&&support.getUserDropAction==TransferHandler.MOVE{ //拖放、移动 } }
…但是如何获取剪切/复制和粘贴的信息?或者有更好的通用方法吗?

也许您可以从Swing教程中获得足够的提示,其中包含一个工作示例:

可以通过TransferSupportisDrop方法确定是拖放还是复制/剪切和粘贴

使用该方法的int action参数确定它是复制粘贴还是剪切粘贴

由于粘贴是使用TransferHandlerimportData执行的。。。方法,重写TransferHandlerexportDone。。。方法,如果参数的操作是TransferHandler.MOVE,则剪切传输源数据

如果操作不是TransferHandler.MOVE,则无需执行任何操作,因为它是一个副本

/** 
 * When the export is complete, remove the old list entry if the
 * action was a move.
 */
protected void exportDone(JComponent c, Transferable data, int action) {
    if (action != MOVE) {
        return;
    }
    JList list = (JList)c;
    DefaultListModel model = (DefaultListModel)list.getModel();
    int index = list.getSelectedIndex();
    model.remove(index);
}

您的解决方案用于区分键盘动作剪切或复制与鼠标动作移动和复制。但我需要一些不同的东西,正如我在主题:移动与复制中所写的。并且不是在exportDone中,而是在importData中,由于某些服务器通信。
/** 
 * When the export is complete, remove the old list entry if the
 * action was a move.
 */
protected void exportDone(JComponent c, Transferable data, int action) {
    if (action != MOVE) {
        return;
    }
    JList list = (JList)c;
    DefaultListModel model = (DefaultListModel)list.getModel();
    int index = list.getSelectedIndex();
    model.remove(index);
}