本题的功能是监听对于颜色的复制和粘贴。程序窗口中,有一个颜色设置框和两个按钮,名为“复制”和“粘贴”,在颜色设置框中设置颜色后,下面的预览面板将显示选中的颜色,单击“复制”按钮后,将设置的颜色复制到系统的剪贴板上,然后继续选择其他颜色,当单击按钮“粘贴”后预览面板的颜色将设置为刚才复制的颜色。
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 SerialSelection(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
SerialSelection(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(DataFlavor flavor)
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;
参考答案:第1处:Color Color=chooser.getColor()
第2处:chooser.setColor(color)
第3处:public Object getTransferData(DataFlavor flavor)
解析: 第1处获得chooser的颜色赋给color;第2处将chooser的颜色设置为color;第3处该方法返回一个对象,且该对象表示将要被传输的数据。