1:
37:
38:
39: package ;
40:
41: import ;
42:
43: import ;
44: import ;
45: import ;
46: import ;
47: import ;
48: import ;
49: import ;
50:
51: public class TransferHandler implements Serializable
52: {
53: static class TransferAction extends AbstractAction
54: {
55: private String command;
56:
57: public TransferAction(String command)
58: {
59: super(command);
60: this.command = command;
61: }
62:
63: public void actionPerformed(ActionEvent event)
64: {
65: JComponent component = (JComponent) event.getSource();
66: TransferHandler transferHandler = component.getTransferHandler();
67: Clipboard clipboard = getClipboard(component);
68:
69: if (clipboard == null)
70: {
71:
72: Toolkit.getDefaultToolkit().beep();
73: return;
74: }
75:
76: if (command.equals(COMMAND_COPY))
77: transferHandler.exportToClipboard(component, clipboard, COPY);
78: else if (command.equals(COMMAND_CUT))
79: transferHandler.exportToClipboard(component, clipboard, MOVE);
80: else if (command.equals(COMMAND_PASTE))
81: {
82: Transferable transferable = clipboard.getContents(null);
83:
84: if (transferable != null)
85: transferHandler.importData(component, transferable);
86: }
87: }
88:
89:
96: private static Clipboard getClipboard(JComponent component)
97: {
98: try
99: {
100: return component.getToolkit().getSystemClipboard();
101: }
102: catch (SecurityException se)
103: {
104: return null;
105: }
106: }
107: }
108:
109: private static final long serialVersionUID = -967749805571669910L;
110:
111: private static final String COMMAND_COPY = "copy";
112: private static final String COMMAND_CUT = "cut";
113: private static final String COMMAND_PASTE = "paste";
114:
115: public static final int NONE = 0;
116: public static final int COPY = 1;
117: public static final int MOVE = 2;
118: public static final int COPY_OR_MOVE = 3;
119:
120: private static Action copyAction = new TransferAction(COMMAND_COPY);
121: private static Action cutAction = new TransferAction(COMMAND_CUT);
122: private static Action pasteAction = new TransferAction(COMMAND_PASTE);
123:
124: private int sourceActions;
125: private Icon visualRepresentation;
126:
127: public static Action getCopyAction()
128: {
129: return copyAction;
130: }
131:
132: public static Action getCutAction()
133: {
134: return cutAction;
135: }
136:
137: public static Action getPasteAction()
138: {
139: return pasteAction;
140: }
141:
142: protected TransferHandler()
143: {
144: this.sourceActions = NONE;
145: }
146:
147: public TransferHandler(String property)
148: {
149: this.sourceActions = property != null ? COPY : NONE;
150: }
151:
152: public boolean canImport(JComponent c, DataFlavor[] flavors)
153: throws NotImplementedException
154: {
155: return false;
156: }
157:
158: protected Transferable createTransferable(JComponent c)
159: throws NotImplementedException
160: {
161: return null;
162: }
163:
164: public void exportAsDrag(JComponent c, InputEvent e, int action)
165: throws NotImplementedException
166: {
167:
168: }
169:
170: protected void exportDone(JComponent c, Transferable data, int action)
171: throws NotImplementedException
172: {
173:
174: }
175:
176: public void exportToClipboard(JComponent c, Clipboard clip, int action)
177: throws NotImplementedException
178: {
179:
180: }
181:
182: public int getSourceActions(JComponent c)
183: {
184: return sourceActions;
185: }
186:
187: public Icon getVisualRepresentation(Transferable t)
188: {
189: return visualRepresentation;
190: }
191:
192: public boolean importData(JComponent c, Transferable t)
193: throws NotImplementedException
194: {
195: return false;
196: }
197: }