我这里用的this,那么整个frame都可以接收拖拽事件了。 但不管你拖到哪里,都是给文本框赋值,呵呵
new DropTarget(this, DnDConstants.ACTION_COPY_OR_MOVE, new DropTextTartget(textField));
import java.awt.datatransfer.DataFlavor; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTargetAdapter; import java.awt.dnd.DropTargetDropEvent; import java.io.File; import java.util.List;
import javax.swing.JTextField;
public class DropTextTartget extends DropTargetAdapter {
private JTextField text; public DropTextTartget(JTextField text) { this.text = text; } @Override public void drop(DropTargetDropEvent dtde) { try { if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor))// 如果拖入的文件格式受支持 { dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);// 接收拖拽来的数据 List<File> list = (List<File>) (dtde.getTransferable().getTransferData(DataFlavor.javaFileListFlavor)); File f = (File) list.get(0); text.setText(f.getAbsolutePath()); dtde.dropComplete(true);// 指示拖拽操作已完成 } else { dtde.rejectDrop();// 否则拒绝拖拽来的数据 } } catch (Exception e) { e.printStackTrace(); } }
}
|