TransferHandler.java [plain text]
package javax.swing;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.io.Serializable;
public class TransferHandler implements Serializable
{
static class TransferAction extends AbstractAction
{
private String command;
public TransferAction(String command)
{
this.command = command;
}
public void actionPerformed(ActionEvent event)
{
JComponent component = (JComponent) event.getSource();
TransferHandler transferHandler = component.getTransferHandler();
Clipboard clipboard = getClipboard(component);
if (command.equals(COMMAND_COPY))
transferHandler.exportToClipboard(component, clipboard, COPY);
else if (command.equals(COMMAND_CUT))
transferHandler.exportToClipboard(component, clipboard, MOVE);
else if (command.equals(COMMAND_PASTE))
{
Transferable transferable = clipboard.getContents(null);
if (transferable != null)
transferHandler.importData(component, transferable);
}
}
private static Clipboard getClipboard(JComponent component)
{
SecurityManager sm = System.getSecurityManager();
if (sm != null)
{
try
{
sm.checkSystemClipboardAccess();
return component.getToolkit().getSystemClipboard();
}
catch (SecurityException e)
{
}
}
if (clipboard == null)
clipboard = new Clipboard("Clipboard");
return clipboard;
}
}
private static final long serialVersionUID = -7908749299918704233L;
private static final String COMMAND_COPY = "copy";
private static final String COMMAND_CUT = "cut";
private static final String COMMAND_PASTE = "paste";
public static final int NONE = 0;
public static final int COPY = 1;
public static final int MOVE = 2;
public static final int COPY_OR_MOVE = 3;
private static Action copyAction = new TransferAction(COMMAND_COPY);
private static Action cutAction = new TransferAction(COMMAND_CUT);
private static Action pasteAction = new TransferAction(COMMAND_PASTE);
private static Clipboard clipboard;
private int sourceActions;
private Icon visualRepresentation;
public static Action getCopyAction()
{
return copyAction;
}
public static Action getCutAction()
{
return cutAction;
}
public static Action getPasteAction()
{
return pasteAction;
}
protected TransferHandler()
{
this.sourceActions = NONE;
}
public TransferHandler(String property)
{
this.sourceActions = property != null ? COPY : NONE;
}
public boolean canImport (JComponent c, DataFlavor[] flavors)
{
return false;
}
protected Transferable createTransferable(JComponent c)
{
return null;
}
public void exportAsDrag (JComponent c, InputEvent e, int action)
{
}
protected void exportDone (JComponent c, Transferable data, int action)
{
}
public void exportToClipboard(JComponent c, Clipboard clip, int action)
{
}
public int getSourceActions (JComponent c)
{
return sourceActions;
}
public Icon getVisualRepresentation (Transferable t)
{
return visualRepresentation;
}
public boolean importData (JComponent c, Transferable t)
{
return false;
}
}