java - 如何区分importData中的复制/移动

标签 java swing drag-and-drop

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

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

@Override
public boolean importData(final TransferSupport support) {
    if(support.isDrop() && support.getUserDropAction() == TransferHandler.MOVE) {
        // drag and drop, MOVE
    }
}

...但是如何获取此信息以进行剪切/复制和粘贴?或者有更好的、通用的方法吗?

最佳答案

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

<小时/>

可以通过TransferSupport#isDrop()来确定是拖放还是复制/剪切粘贴方法。

/**
 * Perform the actual data import.
 */
public boolean importData(TransferHandler.TransferSupport info) {
    // ...
    if (info.isDrop()) { // This is a drop
        // ...
    } else { // This is a paste
        // ...
    }

使用 TransferHandler#exportDone(...)方法的int action参数来确定是复制和粘贴还是剪切和粘贴

由于粘贴是通过 TransferHandler#importData(...) 执行的方法,覆盖 TransferHandler#exportDone(...)粘贴完成后调用的方法,如果参数的操作是 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);
}

关于java - 如何区分importData中的复制/移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57920828/

相关文章:

java - Jenkins 设置为用户 selenium java 脚本

java - 从 Windows 为 Java 创建 native OSX 可执行文件

java - 将圆形附加到 Path2D

android - 如何获取 View 的边距,移动到运行时未知的位置

java - 拖放 : Operation while dropping a file from a component to the explorer, 取景器等

java - 服务对象的定义是什么?

Java隐式转换

java - 删除并添加回 JPanel 后,MouseEvent 不会在 JList 中触发

java - 仅在java中为特定组件调度事件

arrays - 如何从文本文件中获取字符串到批处理文件中的数组?