package aa;
import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
class Person
{
private String name;
private int age;
public Person(){}
public Person(String name , int age)
{
this.name = name;
this.age = age;
}
// name的setter和getter方法
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
// age的setter和getter方法
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return this.age;
}
public String toString()
{
return "Person[ name=" + name + " , age=" + age + " ]";
}
}
public class CopyPerson
{
Frame f = new Frame("复制对象");
Button copy = new Button("复制");
Button paste = new Button("粘贴");
TextField name = new TextField(15);
TextField age = new TextField(15);
TextArea ta = new TextArea(3 , 30);
// 创建本地的剪贴板
Clipboard clipboard = new Clipboard("cp");
public void init()
{
Panel p = new Panel();
p.add(new Label("姓名"));
p.add(name);
p.add(new Label("年龄"));
p.add(age);
f.add(p , BorderLayout.NORTH);
f.add(ta);
Panel bp = new Panel();
// 为“复制”按钮添加事件监听器
copy.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
copyPerson();
}
});
// 为“粘贴”按钮添加事件监听器
paste.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
readPerson();
}
catch (Exception ee)
{
ee.printStackTrace();
}
}
});
bp.add(copy);
bp.add(paste);
f.add(bp , BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
}
public void copyPerson()
{
// 以name,age文本框的内容创建Person对象
Person p = new Person(name.getText()
, Integer.parseInt(age.getText()));
// 将Person对象封装成LocalObjectSelection对象
LocalObjectSelection ls = new LocalObjectSelection(p);
// 将LocalObjectSelection对象放入本地剪贴板
clipboard.setContents(ls , null);
}
public void readPerson()throws Exception
{
// 创建保存Person对象引用的DataFlavor对象
DataFlavor peronFlavor = new DataFlavor(
"application/x-java-jvm-local-objectref;class=aa.Person");
// 取出本地剪贴板内的内容
if (clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor))
{
Person p = (Person)clipboard.getData(peronFlavor);
ta.setText(p.toString());
}
}
public static void main(String[] args)
{
new CopyPerson().init();
}
}
-------------------------------------------------------------------------------------------------------------------------------------
package aa;
import java.awt.datatransfer.*;
public class LocalObjectSelection implements Transferable
{
// 持有一个对象的引用
private Object obj;
public LocalObjectSelection(Object obj)
{
this.obj = obj;
}
// 返回该Transferable对象支持的DataFlavor
public DataFlavor[] getTransferDataFlavors()
{
DataFlavor[] flavors = new DataFlavor[2];
//获取被封装对象的类型
Class<? extends Object> clazz = obj.getClass();
String mimeType = "application/x-java-jvm-local-objectref;"
+ "class=" + clazz.getName();
try
{
flavors[0] = new DataFlavor(mimeType);
flavors[1] = DataFlavor.stringFlavor;
return flavors;
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
return null;
}
}
// 取出该Transferable对象封装的数据
public Object getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException
{
if(!isDataFlavorSupported(flavor))
{
throw new UnsupportedFlavorException(flavor);
}
if (flavor.equals(DataFlavor.stringFlavor))
{
return obj.toString();
}
return obj;
}
public boolean isDataFlavorSupported(DataFlavor flavor)
{
return flavor.equals(DataFlavor.stringFlavor) ||
flavor.getPrimaryType().equals("application")
&& flavor.getSubType().equals("x-java-jvm-local-objectref")
&& flavor.getRepresentationClass().isAssignableFrom(obj.getClass());
}
}
运行结果:
注意:
当不打包时,即注释掉:package aa; 那么
DataFlavor peronFlavor = new DataFlavor("application/x-java-jvm-local-objectref;class=aa.Person");
须改为:
DataFlavor peronFlavor = new DataFlavor("application/x-java-jvm-local-objectref;class=Person");
否则找不到Person类。
改写的程序:
package aa;
import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
class Person
{
private String name;
private int age;
public Person(){}
public Person(String name , int age)
{
this.name = name;
this.age = age;
}
// name的setter和getter方法
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
// age的setter和getter方法
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return this.age;
}
public String toString()
{
return "Person[ name=" + name + " , age=" + age + " ]";
}
}
public class CopyPerson
{
Frame f = new Frame("复制对象");
Button copy = new Button("复制");
Button paste = new Button("粘贴");
TextField name = new TextField(15);
TextField age = new TextField(15);
TextArea ta = new TextArea(3 , 30);
// 创建本地的剪贴板
Clipboard clipboard = new Clipboard("cp");
public void init()
{
Panel p = new Panel();
p.add(new Label("姓名"));
p.add(name);
p.add(new Label("年龄"));
p.add(age);
f.add(p , BorderLayout.NORTH);
f.add(ta);
Panel bp = new Panel();
// 为“复制”按钮添加事件监听器
copy.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
copyPerson();
}
});
// 为“粘贴”按钮添加事件监听器
paste.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
readPerson();
}
catch (Exception ee)
{
ee.printStackTrace();
}
}
});
bp.add(copy);
bp.add(paste);
f.add(bp , BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
}
public void copyPerson()
{
// 以name,age文本框的内容创建Person对象
Person p = new Person(name.getText()
, Integer.parseInt(age.getText()));
// 将Person对象封装成LocalObjectSelection对象
LocalObjectSelection ls = new LocalObjectSelection(p);
// 将LocalObjectSelection对象放入本地剪贴板
clipboard.setContents(ls , null);
}
public void readPerson()throws Exception
{
// 创建保存Person对象引用的DataFlavor对象
DataFlavor peronFlavor = new DataFlavor(
"application/x-java-jvm-local-objectref;class=aa.Person");
// 取出本地剪贴板内的内容
if (clipboard.isDataFlavorAvailable(peronFlavor))
{
Person p = (Person)clipboard.getData(peronFlavor);
ta.setText(p.toString());
}
}
public static void main(String[] args)
{
new CopyPerson().init();
}
}
--------------------------------------------------------------------------------------------------------------------
package aa;
import java.awt.datatransfer.*;
public class LocalObjectSelection implements Transferable
{
// 持有一个对象的引用
private Object obj;
public LocalObjectSelection(Object obj)
{
this.obj = obj;
}
// 返回该Transferable对象支持的DataFlavor
public DataFlavor[] getTransferDataFlavors()
{
DataFlavor[] flavors = new DataFlavor[2];
//获取被封装对象的类型
Class<? extends Object> clazz = obj.getClass();
String mimeType = "application/x-java-jvm-local-objectref;"
+ "class=" + clazz.getName();
try
{
flavors[0] = new DataFlavor(mimeType);
return flavors;
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
return null;
}
}
// 取出该Transferable对象封装的数据
public Object getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException
{
if(!isDataFlavorSupported(flavor))
{
throw new UnsupportedFlavorException(flavor);
}
return obj;
}
public boolean isDataFlavorSupported(DataFlavor flavor)
{
return flavor.getPrimaryType().equals("application")
&& flavor.getSubType().equals("x-java-jvm-local-objectref")
&& flavor.getRepresentationClass().isAssignableFrom(obj.getClass());
}
}