-
Notifications
You must be signed in to change notification settings - Fork 79
Expand file tree
/
Copy pathSerialTransferFrame.java
More file actions
137 lines (122 loc) · 3.52 KB
/
Copy pathSerialTransferFrame.java
File metadata and controls
137 lines (122 loc) · 3.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package serialTransfer;
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
/**
* This frame contains a color chooser, and copy and paste buttons.
*/
class SerialTransferFrame extends JFrame
{
private JColorChooser chooser;
public SerialTransferFrame()
{
chooser = new JColorChooser();
add(chooser, BorderLayout.CENTER);
JPanel panel = new JPanel();
JButton copyButton = new JButton("Copy");
panel.add(copyButton);
copyButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
copy();
}
});
JButton pasteButton = new JButton("Paste");
panel.add(pasteButton);
pasteButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
paste();
}
});
add(panel, BorderLayout.SOUTH);
pack();
}
/**
* Copies the chooser's color into the system clipboard.
*/
private void copy()
{
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
Color color = chooser.getColor();
SerialTransferable selection = new SerialTransferable(color);
clipboard.setContents(selection, null);
}
/**
* Pastes the color from the system clipboard into the chooser.
*/
private void paste()
{
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
try
{
DataFlavor flavor = new DataFlavor(
"application/x-java-serialized-object;class=java.awt.Color");
if (clipboard.isDataFlavorAvailable(flavor))
{
Color color = (Color) clipboard.getData(flavor);
chooser.setColor(color);
}
}
catch (ClassNotFoundException e)
{
JOptionPane.showMessageDialog(this, e);
}
catch (UnsupportedFlavorException e)
{
JOptionPane.showMessageDialog(this, e);
}
catch (IOException e)
{
JOptionPane.showMessageDialog(this, e);
}
}
}
/**
* This class is a wrapper for the data transfer of serialized objects.
*/
class SerialTransferable implements Transferable
{
private Serializable obj;
/**
* Constructs the selection.
* @param o any serializable object
*/
SerialTransferable(Serializable o)
{
obj = o;
}
public DataFlavor[] getTransferDataFlavors()
{
DataFlavor[] flavors = new DataFlavor[2];
Class<?> type = obj.getClass();
String mimeType = "application/x-java-serialized-object;class=" + type.getName();
try
{
flavors[0] = new DataFlavor(mimeType);
flavors[1] = DataFlavor.stringFlavor;
return flavors;
}
catch (ClassNotFoundException e)
{
return new DataFlavor[0];
}
}
public boolean isDataFlavorSupported(DataFlavor flavor)
{
return DataFlavor.stringFlavor.equals(flavor)
|| "application".equals(flavor.getPrimaryType())
&& "x-java-serialized-object".equals(flavor.getSubType())
&& flavor.getRepresentationClass().isAssignableFrom(obj.getClass());
}
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException
{
if (!isDataFlavorSupported(flavor)) throw new UnsupportedFlavorException(flavor);
if (DataFlavor.stringFlavor.equals(flavor)) return obj.toString();
return obj;
}
}