EOS 2  1.1.0
Einfache Objektbasierte Sprache
ClipBoard.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.common.gui;
2 
3 import java.awt.Image;
4 import java.awt.Toolkit;
5 import java.awt.datatransfer.DataFlavor;
6 import java.awt.datatransfer.Transferable;
7 import java.awt.datatransfer.UnsupportedFlavorException;
8 import java.io.ByteArrayInputStream;
9 import java.io.ByteArrayOutputStream;
10 import java.io.IOException;
11 import javax.swing.text.BadLocationException;
12 import javax.swing.text.Document;
13 import javax.swing.text.html.HTMLEditorKit;
14 import javax.swing.text.rtf.RTFEditorKit;
15 
27 public class ClipBoard {
31  private static DataFlavor PLAIN = new DataFlavor(String.class, "text/plain");
35  private static DataFlavor HTML = new DataFlavor(ByteArrayInputStream.class, "text/html");
39  private static DataFlavor RTF = new DataFlavor(ByteArrayInputStream.class, "text/rtf");
40 
45  public static void pushImage(Image image) {
46  TransferableImage timage = new TransferableImage(image);
47  Toolkit.getDefaultToolkit().getSystemClipboard().setContents(timage, null);
48  }
49 
54  public static void pushDocument(Document doc) {
55  TransferableDocument tdoc = new TransferableDocument(doc);
56  Toolkit.getDefaultToolkit().getSystemClipboard().setContents(tdoc, null);
57  }
58 
65  public static void pushDocument(Document doc, int begin, int length) {
66  TransferableDocument tdoc = new TransferableDocument(doc, begin, length);
67  Toolkit.getDefaultToolkit().getSystemClipboard().setContents(tdoc, null);
68  }
69 
74  public static String pollText() {
75  try {
76  Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(PLAIN);
77  return (String) t.getTransferData(PLAIN);
78  } catch (Throwable t) {
79  // Possible errors
80  // IllegalStateException, platform has no clipboard
81  // NullPointerException, clipboard is empty
82  // UnsupportedFlavorException, clipboard contains no text
83  // we don't really care why it failed, we return always an empty
84  // string
85  return "";
86  }
87  }
88 
94  private static class TransferableDocument implements Transferable {
98  String text;
102  ByteArrayInputStream rtf;
106  ByteArrayInputStream html;
107 
112  public TransferableDocument(Document doc) {
113  this(doc, 0, doc.getLength());
114  }
115 
122  public TransferableDocument(Document doc, int begin, int length) {
123  // create fallback text
124  try {
125  text = doc.getText(begin, length);
126  } catch (BadLocationException ex) {
127  // this should never happen
128  }
129  // create rtf
130  try {
131  ByteArrayOutputStream baos = new ByteArrayOutputStream();
132  RTFEditorKit rek = new RTFEditorKit();
133  rek.write(baos, doc, begin, length); // TODO, Bug in Java API
134  rtf = new ByteArrayInputStream(baos.toByteArray());
135  } catch (BadLocationException | IOException ex) {
136  // this should never happen
137  }
138  // create html
139  try {
140  ByteArrayOutputStream baos = new ByteArrayOutputStream();
141  HTMLEditorKit hek = new HTMLEditorKit();
142  hek.write(baos, doc, begin, length); // TODO, Bug in Java API
143  html = new ByteArrayInputStream(baos.toByteArray());
144  } catch (BadLocationException | IOException ex) {
145  // this should never happen
146  }
147 
148  }
149 
150  @Override
151  public DataFlavor[] getTransferDataFlavors() {
152  return new DataFlavor[] { PLAIN, RTF, HTML };
153  }
154 
155  @Override
156  public boolean isDataFlavorSupported(DataFlavor flavor) {
157  return flavor.equals(PLAIN) || flavor.equals(RTF) || flavor.equals(HTML);
158  }
159 
160  @Override
161  public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
162  if (flavor.equals(PLAIN)) {
163  return text;
164  } else if (flavor.equals(RTF)) {
165  return rtf;
166  } else if (flavor.equals(HTML)) {
167  return html;
168  } else {
169  throw new UnsupportedFlavorException(flavor);
170  }
171  }
172  }
173 
179  private static class TransferableImage implements Transferable {
183  private final Image image;
184 
189  public TransferableImage(Image image) {
190  this.image = image;
191  }
192 
193  @Override
194  public DataFlavor[] getTransferDataFlavors() {
195  return new DataFlavor[] { DataFlavor.imageFlavor };
196  }
197 
198  @Override
199  public boolean isDataFlavorSupported(DataFlavor flavor) {
200  return DataFlavor.imageFlavor.equals(flavor);
201  }
202 
203  @Override
204  public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
205  if (!DataFlavor.imageFlavor.equals(flavor)) {
206  throw new UnsupportedFlavorException(flavor);
207  }
208  return image;
209  }
210  }
211 }
static void pushDocument(Document doc)
Definition: ClipBoard.java:54
static void pushDocument(Document doc, int begin, int length)
Definition: ClipBoard.java:65
static void pushImage(Image image)
Definition: ClipBoard.java:45
Impressum