首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何区分importData中的复制/移动

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

Stack Overflow用户
提问于 2019-09-13 17:24:28
回答 1查看 111关注 0票数 0

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

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

代码语言:javascript
复制
@Override
public boolean importData(final TransferSupport support) {
    if(support.isDrop() && support.getUserDropAction() == TransferHandler.MOVE) {
        // drag and drop, MOVE
    }
}

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

EN

回答 1

Stack Overflow用户

发布于 2019-09-13 21:29:00

也许你可以从Swing教程中获得足够的技巧,它包含了一个工作示例:

无论是拖放还是copy/cut paste都可以通过TransferSupport#isDrop()方法来确定。

代码语言:javascript
复制
/**
 * 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参数来确定它是copy paste还是cut and paste。

由于粘贴是使用TransferHandler#importData(...)方法执行的,因此应覆盖粘贴完成后调用的TransferHandler#exportDone(...)方法,如果参数的操作为TransferHandler.MOVE,则剪切传输源数据。

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

代码语言:javascript
复制
/** 
 * 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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57920828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档