本题的功能是监听对于颜色的复制和粘贴。程序窗口中,有一个颜色设置框和两个按钮,名为“复制”和“粘贴”,在颜色设置框中设置颜色后,下面的预览面板将显示选中的颜色,单击“复制”按钮后,将设置的颜色复制到系统的剪贴板上,然后继续选择其他颜色,当单击按钮“粘贴”后预览面板的颜色将设置为刚才复制的颜色。
import java. io. * ;
import java. awt. * ;
import java. awt. datatransfer. * ;
import java. awt. event. * ;
import java. awt. image. * ;
import javax. swing. * ;
public class java3
public static void main(String[] args)
JFrame frame=new SerialTransferFrame();
frame. setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE);
frame. show();
class SerialTransferFrame extends JFrame
public SerialTransferFrame()
setTitle("java3");
Container contentPane=getContentPane();
chooser=new JColorChooser();
contentPane. add (chooser, BorderLayout. CENTER);
JPanel panel=new JPanel();
JButton copyButton=new JButton("复制")
panel. add(copyButton);
copyButton. addActionListener (new ActionListener()
public void actionPerformed(ActionEvent event)
copy();
);
JButton pasteButton=new JButton("粘贴");
panel. add(pasteButton);
pasteButton. addActionListener(new
ActionListener()
public void actionPerformed(ActionEvent event)
paste();
);
contentPane, add(panel, BorderLayout. SOUTH);
pack();
private void copy()
Clipboard clipboard
=Toolkit. getDefaultToolkit(). getSystemClipboard();
int color=chooser, getColor();
SerialSelection selection=new SerialSeleetion(color);
clipboard. setContents(selection, null);
private void paste()
Clipboard clipboard
=Toolkit. getDefaultToolkit(). getSystemClipboard();
Transferable contents=clipboard, getContents(null);
if(contents==null) return;
try
(
DataFlavor flavor=new DataFlavor(
"application/x-java-serialized-object; class=java. awt. Color");
if(contents. isDataFlavorSupported(flavor))
Color color
=(Color) contents. getTransferData(flavor);
______;
catch (ClassNotFoundException exception)
JOptionPane. showMessageDialog(this, exception);
catch (UnsupportedFlavorException exception)
JOptionPane. showMessageDialog(this, exception);
catch(IOException exception)
JOptionPane. showMessageDialog(this, exception);
private JColorChooser chooser;
class SerialSelection implements Transferable
SerialSeleetion(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 exception)
return new DataFlavor[0];
public boolean isDataFlavorSupported (DataFlavorflavor)
return
DataFlavor. stringFlavor. equals(flavor) ||"application", equals(flavor, getPrimaryType())
&&"x-java-serialized-object", equals(flavor. getSubType())
&& flavor. getRepresentationClass(). isAssignableFrom(obj. getClass());
public void getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException
if(!isDataFlavorSupported(flavor))
throw new UnsupportedFlavorException(flavor);
if (DataFlavor. stringFlavor. equals(flavor))
return obj. toString();
return obj;
private Serializable obj;