问题 问答题

本题的功能是监听对于颜色的复制和粘贴。程序窗口中,有一个颜色设置框和两个按钮,名为“复制”和“粘贴”,在颜色设置框中设置颜色后,下面的预览面板将显示选中的颜色,单击“复制”按钮后,将设置的颜色复制到系统的剪贴板上,然后继续选择其他颜色,当单击按钮“粘贴”后预览面板的颜色将设置为刚才复制的颜色。
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处该方法返回一个对象,且该对象表示将要被传输的数据。

单项选择题
问答题 简答题