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毫秒