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