gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:43:00 27 4
gpt4 key购买 nike

我需要在拖放或复制/剪切和粘贴(复制与移动)期间获取操作类型。它是一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com