java中swing的drag and drop源程序示例代码
这篇文章将为大家详细讲解有关java中swing的drag and drop源程序示例代码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
java swing的drag and drop源程序
import Java.awt.*; import java.io.*; import java.util.*; import java.awt.event.*; import java.awt.dnd.*; import java.awt.datatransfer.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.tree.*; public class ListDemo extends JFrame implements ListselectionListener { private DroppableList list; private JTextField fileName; public ListDemo() { super("ListDemo"); //Create the list and put it in a scroll pane list = new DroppableList(); DefaultListModel listModel = (DefaultListModel)list.getModel(); list.setCellRenderer(new CustomCellRenderer()); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.setSelectedIndex(0); list.addListSelectionListener(this); JScrollPane listScrollPane = new JScrollPane(list); String dirName = new String(""); String filelist[] = new File(dirName).list(); for (int i=0; i < filelist.length ; i++ ) { String thisFileSt = dirName+filelist[i]; File thisFile = new File(thisFileSt); if (thisFile.isDirectory()) continue; try { listModel.addElement(makeNode(thisFile.getName(), thisFile.toURL().toString(), thisFile.getAbsolutePath())); } catch (java.NET.MalformedURLException e){ } } fileName = new JTextField(50); String name = listModel.getElementAt( list.getSelectedIndex()).toString(); fileName.setText(name); file://Create a panel that uses FlowLayout (the default). JPanel buttonPane = new JPanel(); buttonPane.add(fileName); Container contentPane = getContentPane(); contentPane.add(listScrollPane, BorderLayout.CENTER); contentPane.add(buttonPane, BorderLayout.NORTH); } public void valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting() == false) { fileName.setText(""); if (list.getSelectedIndex() != -1) { String name = list.getSelectedValue().toString(); fileName.setText(name); } } } private static Hashtable makeNode(String name, String url, String strPath) { Hashtable hashtable = new Hashtable(); hashtable.put("name", name); hashtable.put("url", url); hashtable.put("path", strPath); return hashtable; } public class DroppableList extends JList implements DropTargetListener, DragsourceListener, DragGestureListener { DropTarget dropTarget = new DropTarget (this, this); DragSource dragSource = DragSource.getDefaultDragSource(); public DroppableList() { dragSource.createDefaultDragGestureRecognizer( this, DnDConstants.ACTION_COPY_OR_MOVE, this); setModel(new DefaultListModel()); } public void dragDropEnd(DragSourceDropEvent DragSourceDropEvent){} public void dragEnter(DragSourceDragEvent DragSourceDragEvent){} public void dragExit(DragSourceEvent DragSourceEvent){} public void dragOver(DragSourceDragEvent DragSourceDragEvent){} public void dropActionChanged(DragSourceDragEvent DragSourceDragEvent){} public void dragEnter (DropTargetDragEvent dropTargetDragEvent) { dropTargetDragEvent.acceptDrag (DnDConstants.ACTION_COPY_OR_MOVE); } public void dragExit (DropTargetEvent dropTargetEvent) {} public void dragOver (DropTargetDragEvent dropTargetDragEvent) {} public void dropActionChanged (DropTargetDragEvent dropTargetDragEvent){} public synchronized void drop (DropTargetDropEvent dropTargetDropEvent) { try { Transferable tr = dropTargetDropEvent.getTransferable(); if (tr.isDataFlavorSupported (DataFlavor.javaFileListFlavor)) { dropTargetDropEvent.acceptDrop ( DnDConstants.ACTION_COPY_OR_MOVE); java.util.List fileList = (java.util.List) tr.getTransferData(DataFlavor.javaFileListFlavor); Iterator iterator = fileList.iterator(); while (iterator.hasNext()) { File file = (File)iterator.next(); Hashtable hashtable = new Hashtable(); hashtable.put("name",file.getName()); hashtable.put("url",file.toURL().toString()); hashtable.put("path",file.getAbsolutePath()); ((DefaultListModel)getModel()).addElement(hashtable); } dropTargetDropEvent.getDropTargetContext().dropComplete(true); } else { System.err.println ("Rejected"); dropTargetDropEvent.rejectDrop(); } } catch (IOException io) { io.printStackTrace(); dropTargetDropEvent.rejectDrop(); } catch (UnsupportedFlavorException ufe) { ufe.printStackTrace(); dropTargetDropEvent.rejectDrop(); } } public void dragGestureRecognized(DragGestureEvent dragGestureEvent) { if (getSelectedIndex() == -1) return; object obj = getSelectedValue(); if (obj == null) { // Nothing selected, nothing to drag System.out.println ("Nothing selected - beep"); getToolkit().beep(); } else { Hashtable table = (Hashtable)obj; FileSelection transferable = new FileSelection(new File((String)table.get("path"))); dragGestureEvent.startDrag( DragSource.DefaultCopyDrop, transferable, this); } } } public class CustomCellRenderer implements ListCellRenderer { DefaultListCellRenderer listCellRenderer = new DefaultListCellRenderer(); public Component getListCellRendererComponent( JList list, Object value, int index, boolean selected, boolean hasFocus) { listCellRenderer.getListCellRendererComponent( list, value, index, selected, hasFocus); listCellRenderer.setText(getValueString(value)); return listCellRenderer; } private String getValueString(Object value) { String returnString = "null"; if (value != null) { if (value instanceof Hashtable) { Hashtable h = (Hashtable)value; String name = (String)h.get("name"); String url = (String)h.get("url"); returnString = name + " ==> " + url; } else { returnString = "X: " + value.toString(); } } return returnString; } } public class FileSelection extends Vector implements Transferable { final static int FILE = 0; final static int STRING = 1; final static int PLAIN = 2; DataFlavor flavors[] = {DataFlavor.javaFileListFlavor, DataFlavor.stringFlavor, DataFlavor.plainTextFlavor}; public FileSelection(File file) { addElement(file); } /* Returns the array of flavors in which it can provide the data. */ public synchronized DataFlavor[] getTransferDataFlavors() { return flavors; } /* Returns whether the requested flavor is supported by this object. */ public boolean isDataFlavorSupported(DataFlavor flavor) { boolean b = false; b |=flavor.equals(flavors[FILE]); b |= flavor.equals(flavors[STRING]); b |= flavor.equals(flavors[PLAIN]); return (b); } /** * If the data was requested in the "java.lang.String" flavor, * return the String representing the selection. */ public synchronized Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { if (flavor.equals(flavors[FILE])) { return this; } else if (flavor.equals(flavors[PLAIN])) { return new StringReader(((File)elementAt(0)).getAbsolutePath()); } else if (flavor.equals(flavors[STRING])) { return((File)elementAt(0)).getAbsolutePath(); } else { throw new UnsupportedFlavorException(flavor); } } } public static void main(String s[]) { JFrame frame = new ListDemo(); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.pack(); frame.setVisible(true); } }
关于“java中swing的drag and drop源程序示例代码”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。