Java 版 (精华区)
如何用Java实现剪贴板
在Java中实现剪贴板功能是使用java.awt.datatransfer.Clipboard类。该类就是
实现了虚拟的剪贴板,它有剪贴板内想写的内容,以及取出剪贴板上内容的方法,
同时还指明这个剪贴板内存区域是属于哪个对象的。例如文本框之类的部件。
接口Transferable主要是为传输操作提供数据。
真正的数据内容是由java.awt.datatransfer.DataFlavor类来表示的。它可以表示
plain text和Java Unicode String class两种不同数据的格式。
下面的程序例子就是一个完整的剪贴板。
import java.awt.*;
import java.io.*;
import java.awt.datatransfer.*;
import java.awt.event.*;
class Main extends Frame implements ActionListener, ClipboardOwner {
TextArea textArea = new TextArea();
Main() {
super("Clipboard Example");
MenuBar mb = new MenuBar();
Menu m = new Menu("Edit");
// Add text area.
setLayout(new BorderLayout());
add("Center", textArea);
// Prepare menu and menubar.
m.add("Cut");
m.add("Copy");
m.add("Paste");
m.add("Exit");
mb.add(m);
setMenuBar(mb);
// Listen to events from the menu items.
for (int i=0; i < m.getItemCount(); i++) {
m.getItem(i).addActionListener(this);
}
setSize(300, 300);
show();
}
public void actionPerformed(ActionEvent evt) {
if ("Paste".equals(evt.getActionCommand())) {
boolean error = true;
Transferable t =
getToolkit().getSystemClipboard().getContents(this);
try {
if (t != null
&& t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
textArea.setBackground(Color.white);
textArea.setForeground(Color.black);
textArea.replaceRange(
(String)t.getTransferData(DataFlavor.stringFlavor),
textArea.getSelectionStart(),
textArea.getSelectionEnd());
error = false;
}
} catch (UnsupportedFlavorException e) {
} catch (IOException e) {
}
// Display an error message.
if (error) {
textArea.setBackground(Color.red);
textArea.setForeground(Color.white);
textArea.repaint();
textArea.setText("ERROR: \nEither the clipboard"
+ " is empty or the contents is not a string.");
}
} else if ("Copy".equals(evt.getActionCommand())) {
setContents();
} else if ("Cut".equals(evt.getActionCommand())) {
setContents();
textArea.replaceRange("", textArea.getSelectionStart(),
textArea.getSelectionEnd());
} else if ("Exit".equals(evt.getActionCommand()))
{
this.dispose();
System.exit(0);
}
}
void setContents() {
String s = textArea.getSelectedText();
StringSelection contents = new StringSelection(s);
getToolkit().getSystemClipboard().setContents(contents, this);
}
public void lostOwnership(Clipboard clipboard, Transferable contents) {
System.out.println("lost ownership");
}
public static void main(String args[]) {
new Main();
}
}
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.417毫秒