package gui.tree;
import javax.swing.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class JLabelTransferable implements Transferable {
public JLabelTransferable(JLabel label) {
this.label = label;
}
public DataFlavor[] getTransferDataFlavors() {
return flavors;
}
public boolean isDataFlavorSupported(DataFlavor fl) {
for (int i = 0; i < flavors.length; i++) {
if (fl.equals(flavors[i])) {
return true;
}
}
return false;
}
public Object getTransferData(DataFlavor fl) {
if (!isDataFlavorSupported(fl)) {
return null;
}
if (fl.equals(DataFlavor.stringFlavor)) {
return label.getText() + " (DataFlavor.stringFlavor)";
} else if (fl.equals(jLabelFlavor)) {
return label;
} else {
try {
String targetText = label.getText() + " (plain text flavor)";
int length = targetText.length();
ByteArrayOutputStream os = new ByteArrayOutputStream();
OutputStreamWriter w = new OutputStreamWriter(os);
w.write(targetText, 0, length);
w.flush();
byte[] bytes = os.toByteArray();
w.close();
return new ByteArrayInputStream(bytes);
} catch (IOException e) {
return null;
}
}
}
public static final DataFlavor jLabelFlavor =
new DataFlavor(JLabel.class, "Swing JLabel");
private JLabel label; private static final DataFlavor[] flavors =
new DataFlavor[]{
DataFlavor.stringFlavor,
new DataFlavor("text/plain; charset=ascii", "ASCII text"),
jLabelFlavor
};
}