本题的功能是监听鼠标的拖曳操作。窗口中有一个列表框,列表框中列出了当前目录的所有文件,鼠标选中一个或多个文件后拖曳出窗口,此操作的功能是将拖曳的文件复制一份在拖曳的目的目录下。 import java.awt.*; import java.awt.datatransfer.*; import java.awt.dnd.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.*; public class java3 { public static void main(String[]args) { JFrame frame=new DragSourceFrame(); frame.setDefauhCloseOperation(JFrame.EXIT_ 0N_CLoSE); frame.show(); } } class DragSoureeFrame extends JFrame { public DragSourceFrame() { setTitle("java3"); setSize(WlDTH,HElGHT); Container contentPane=getContentPane(); File f=new File(".").getabsoluteFile(); File[]files=f.listFiles(); model=new DefaultListModel(); for(int i=0;i try { model.addElement(files[i].getCanonicalFile()); } catch(IOException exception) { JOptionPane.showMessageDialog(this,exeep- tion); } fileList=new JList(model); contentPane.add(new JScrollPane(fileList), BorderLayout.CENTER); contentPane.add(new JLabel("从列表中拖曳出文件"), BorderLayout.NoRTH); DragSource dragSource=DragSource.getDefauh- DragSource(); dragSource.createDefaultDragGestureRecognizer (fileList,DnDConstants. ACTION_COPY_0R_MOVE,new DragGestureListener() { public void dragGestureRecognized( DragGestureEvent event) { draggedValues=fileList.getSelectedValues(); Transferable transferable =new FiteListTransferable(draggedValues); evenr.startDrag(null,transferable, new FileListDragSourceListener()); } }); } private class FileListDragSourceListener imple- ments DragSourceAdapter { public void dragDropEnd(DragSourceDropEvent event) { if(event.getDropSuccess()) { int action=event.getDropAction(); if(action= =DnDConstants.ACTl0N MOVE) { for(int i=0;i model.removeElement(draggedValues[i]); } } } } private JList fileList; private DefauhListModel model; private Object[]draggedValues; private static final int WIDTH=300; private static final int HEIGHT=200; } class FileListTransferable implements Transferable { public FileListTransferable(Object[]files) { fileList=new ArrayList(Arrays.asList(files)); } public DataFlavor[]getTransferDataFlavors() { return flavors; public boolean isDataFlavorSupported(DataFlavor flavor) { return Arrays. asList(flavors), contains(flavor) ; } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException if(flavor, equals(DataFlavor, javaFileListFlavor) ) return fileList; else if(flavor, equals(DataFlavor, stringFlavor)) return fileList, toString() ; else throw new UnsupportedFlavorException(flavor) ; } private static DataFlavor[] flavors = { DataFlavor. j avaFileListFlavor, DataFlavor. stringFlavor }; private java. util. List fileList;
参考答案:第1处:File f—new File(".").getAbsoluteFile() 第2处:int i=0;i 第3处:private class FileListDragSoureeListener extends DragSourceAdapter
解析:【解析】第1处是通过绝对路径创建一个File对象f;第2处是files中f文件所在目录下的所有文件名列表,此处就是遍历这些文件名;第3处是定义了一个FileListDragSoureeListener类继承用于接收拖动源事件的抽象适配器类 DragSoureeAdapter。