我需要在拖放或复制/剪切和粘贴(复制与移动)过程中获取操作类型。它是一个Swing应用程序,并且实现了TransferHandle。在操作结束时,我需要在importData方法中使用此信息。
对于拖放,似乎可以测试getUserDropAction,如下所示
@Override
public boolean importData(final TransferSupport support) {
if(support.isDrop() && support.getUserDropAction() == TransferHandler.MOVE) {
// drag and drop, MOVE
}
}...but如何获取此信息以进行剪切/复制和粘贴?或者有没有更好的,通用的方法?
发布于 2019-09-13 21:29:00
也许你可以从Swing教程中获得足够的技巧,它包含了一个工作示例:
无论是拖放还是copy/cut paste都可以通过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参数来确定它是copy paste还是cut and paste。
由于粘贴是使用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);
}https://stackoverflow.com/questions/57920828
复制相似问题