uberhandler.java

来自「java swing 开发代码」· Java 代码 · 共 150 行

JAVA
150
字号
// 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.// package	jswing.ch24;import javax.swing.*;import java.awt.datatransfer.*;import java.io.*;public 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);  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?