Java tutorial
/* Java Swing, 2nd Edition By Marc Loy, Robert Eckstein, Dave Wood, James Elliott, Brian Cole ISBN: 0-596-00408-7 Publisher: O'Reilly */ // UTest.java //A test frame work for the UberHandler drop handler. This version has //no fancy Unicode characters for ease of use. (Note that "ease of use" //only applys to humans...the Java tools are quite happy with Unicode //characters. Not all text editors are, though...) // import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.io.BufferedReader; import java.io.Reader; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.TransferHandler; public class UTest { public static void main(String args[]) { JFrame frame = new JFrame("Debugging Drop Zone"); frame.setSize(500, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTextArea jta = new JTextArea(); frame.getContentPane().add(new JScrollPane(jta)); UberHandler uh = new UberHandler(); uh.setOutput(jta); jta.setTransferHandler(uh); frame.setVisible(true); } } //UberHandler.java //A TransferHandler that will accept any drop at all. If a text area is //registered, debugging information will be sent there. Otherwise, all //debug information will be sent to stdout. // class UberHandler extends TransferHandler { JTextArea output; public void TransferHandler() { } public boolean canImport(JComponent dest, DataFlavor[] flavors) { // you bet we can! return true; } public boolean importData(JComponent src, Transferable transferable) { // Ok, here's the tricky part... println("Receiving data from " + src); println("Transferable object is: " + transferable); println("Valid data flavors: "); DataFlavor[] flavors = transferable.getTransferDataFlavors(); DataFlavor listFlavor = null; DataFlavor objectFlavor = null; DataFlavor readerFlavor = null; int lastFlavor = flavors.length - 1; // Check the flavors and see if we find one we like. // If we do, save it. for (int f = 0; f <= lastFlavor; f++) { println(" " + flavors[f]); if (flavors[f].isFlavorJavaFileListType()) { listFlavor = flavors[f]; } if (flavors[f].isFlavorSerializedObjectType()) { objectFlavor = flavors[f]; } if (flavors[f].isRepresentationClassReader()) { readerFlavor = flavors[f]; } } // Ok, now try to display the content of the drop. try { DataFlavor bestTextFlavor = DataFlavor.selectBestTextFlavor(flavors); BufferedReader br = null; String line = null; if (bestTextFlavor != null) { println("Best text flavor: " + bestTextFlavor.getMimeType()); println("Content:"); Reader r = bestTextFlavor.getReaderForText(transferable); br = new BufferedReader(r); line = br.readLine(); while (line != null) { println(line); line = br.readLine(); } br.close(); } else if (listFlavor != null) { java.util.List list = (java.util.List) transferable.getTransferData(listFlavor); println(list); } else if (objectFlavor != null) { println("Data is a java object:\n" + transferable.getTransferData(objectFlavor)); } else if (readerFlavor != null) { println("Data is an InputStream:"); br = new BufferedReader((Reader) transferable.getTransferData(readerFlavor)); line = br.readLine(); while (line != null) { println(line); } br.close(); } else { // Don't know this flavor type yet... println("No text representation to show."); } println("\n\n"); } catch (Exception e) { println("Caught exception decoding transfer:"); println(e); return false; } return true; } public void exportDone(JComponent source, Transferable data, int action) { // Just let us know when it occurs... System.err.println("Export Done."); } public void setOutput(JTextArea jta) { output = jta; } protected void print(Object o) { print(o.toString()); } protected void print(String s) { if (output != null) { output.append(s); } else { System.out.println(s); } } protected void println(Object o) { println(o.toString()); } protected void println(String s) { if (output != null) { output.append(s); output.append("\n"); } else { System.out.println(s); } } protected void println() { println(""); } public static void main(String args[]) { JFrame frame = new JFrame("Debugging Drop Zone"); frame.setSize(500, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTextArea jta = new JTextArea(); frame.getContentPane().add(new JScrollPane(jta)); UberHandler uh = new UberHandler(); uh.setOutput(jta); jta.setTransferHandler(uh); frame.setVisible(true); } }