如題,Swing中實現拖拽功能,代碼很簡單,都有注釋,自己看,運行效果如下圖:


代碼:
package com; import java.awt.*; import java.awt.datatransfer.DataFlavor; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetAdapter; import java.awt.dnd.DropTargetDropEvent; import java.io.File; import java.util.List; import javax.swing.*; /** * 最簡單的Java拖拽代碼示例 * @author 劉顯安 * 2013年1月24日 */ public class DragTest extends JFrame { JPanel panel;//要接受拖拽的面板 public DragTest() { panel = new JPanel(); panel.setBackground(Color.YELLOW); getContentPane().add(panel, BorderLayout.CENTER); setSize(500, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocation(400, 200); setTitle("最簡單的拖拽示例:拖拽文件到下面(20130124)"); drag();//啟用拖拽 } public static void main(String[] args) throws Exception { UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");//設置皮膚 new DragTest().setVisible(true);; } public void drag()//定義的拖拽方法 { //panel表示要接受拖拽的控件 new DropTarget(panel, DnDConstants.ACTION_COPY_OR_MOVE, new DropTargetAdapter() { @Override public void drop(DropTargetDropEvent dtde)//重寫適配器的drop方法 { try { if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor))//如果拖入的文件格式受支持 { dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);//接收拖拽來的數據 List<File> list = (List<File>) (dtde.getTransferable().getTransferData(DataFlavor.javaFileListFlavor)); String temp=""; for(File file:list) temp+=file.getAbsolutePath()+";\n"; JOptionPane.showMessageDialog(null, temp); dtde.dropComplete(true);//指示拖拽操作已完成 } else { dtde.rejectDrop();//否則拒絕拖拽來的數據 } } catch (Exception e) { e.printStackTrace(); } } }); } }
