📄 filedropper.java
字号:
import java.awt.*;import javax.swing.*;import java.awt.datatransfer.*;import javax.swing.filechooser.*;import java.io.*;import java.awt.dnd.*;import java.util.List;import java.util.ArrayList;import java.awt.image.*;public class FileDropper { /* //create frame and label and text editor and quit corner //create drag support to filesystem to provide a file //set proper icon and add file image (resized properly) ??fix image translucency problem //adjust cursor when over valid or invalid drop point. */ public static void main(String[] args) throws IOException { JFrame frame = new JFrame("Drag and Drop File Hack"); frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); FileSystemView fsv = FileSystemView.getFileSystemView(); Icon icon = fsv.getSystemIcon(File.createTempFile("myfile.",".txt")); System.out.println("icon = " + icon); //ImageIcon iicn = (ImageIcon)icon; frame.getContentPane().setLayout(new BorderLayout()); JTextArea text = new JTextArea(); JLabel label = new JLabel("myfile.txt",icon,SwingConstants.CENTER); DragSource ds = DragSource.getDefaultDragSource(); DragGestureRecognizer dgr = ds.createDefaultDragGestureRecognizer( label, DnDConstants.ACTION_MOVE, new FileDragGestureListener(text)); frame.getContentPane().add("North",label); frame.getContentPane().add("Center",text); frame.pack(); frame.setSize(400,300); frame.setVisible(true); }}class FileDragGestureListener extends DragSourceAdapter implements DragGestureListener { JTextArea text; public FileDragGestureListener(JTextArea text) { this.text = text; } Cursor cursor; public void dragGestureRecognized(DragGestureEvent evt) { try { // generate the temp file File temp_dir = File.createTempFile("tempdir",".dir",null); File temp = new File(temp_dir.getParent(),"myfile.txt"); FileOutputStream out = new FileOutputStream(temp); out.write(text.getText().getBytes()); out.close(); // get the right icon FileSystemView fsv = FileSystemView.getFileSystemView(); Icon icn = fsv.getSystemIcon(temp); // we could cast to an image icon, but it might not be one. // painting to a buffer first also solves the problem of passing in the // the right sized buffer because the cursor might scale it // convert to the right sized image Toolkit tk = Toolkit.getDefaultToolkit(); Dimension dim = tk.getBestCursorSize(icn.getIconWidth(),icn.getIconHeight()); BufferedImage buff = new BufferedImage(dim.width,dim.height,BufferedImage.TYPE_INT_ARGB); icn.paintIcon(text,buff.getGraphics(),0,0); // set up drag image if(DragSource.isDragImageSupported()) { evt.startDrag(DragSource.DefaultCopyDrop, buff, new Point(0,0), new TextFileTransferable(temp), this); } else { cursor = tk.createCustomCursor(buff,new Point(0,0),"billybob"); evt.startDrag(cursor, null, new Point(0,0), new TextFileTransferable(temp), this); } } catch (IOException ex) { System.out.println("exception: " + ex.getMessage()); } } public void dragEnter(DragSourceDragEvent evt) { DragSourceContext ctx = evt.getDragSourceContext(); //System.out.println("doing a move: " + evt.getDropAction()); ctx.setCursor(cursor); } public void dragExit(DragSourceEvent evt) { // p("exit"); DragSourceContext ctx = evt.getDragSourceContext(); ctx.setCursor(DragSource.DefaultCopyNoDrop); } /* public void dragOver(DragSourceDragEvent evt) { } public void dragDropEnd(DragSourceDropEvent evt) { //p("drag drop end"); } */ public static void p(String str) { System.out.println(str); }}// create a transferable for the right data flavorclass TextFileTransferable implements Transferable { File temp; public TextFileTransferable(File temp) throws IOException { this.temp = temp; } public Object getTransferData(DataFlavor flavor) { p("get trans data called"); List list = new ArrayList(); list.add(temp); return list; } public DataFlavor[] getTransferDataFlavors() { DataFlavor[] df = new DataFlavor[1]; df[0] = DataFlavor.javaFileListFlavor; return df; } public boolean isDataFlavorSupported(DataFlavor flavor) { if(flavor == DataFlavor.javaFileListFlavor) { return true; } return false; } public static void p(String str) { System.out.println(str); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -