<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 0, comments - 77, trackbacks - 0, articles - 356
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Java提供的剪貼板[轉(zhuǎn)]

    Posted on 2008-06-05 16:45 semovy 閱讀(496) 評論(0)  編輯  收藏 所屬分類: JAVA基礎(chǔ)

    Java提供的剪貼板

    Java提供兩種類型的剪貼板:系統(tǒng)的和本地的.
    本地剪貼板只在當(dāng)前虛擬機(jī)中有效.Java允許多個本地剪貼板同時存在,可以方便地通過剪貼板的名稱來進(jìn)行存取訪問.
    系統(tǒng)剪貼板與同等操作系統(tǒng)直接關(guān)連,允許應(yīng)用程序與運行在該操作系統(tǒng)下的其它程序之間進(jìn)行信息交換.

    在進(jìn)一步深入之前,先看看與剪貼板相同的java類,這些類主要包含在java.awt.datatransfer包中,主要有以下幾種:
    Clipboard類: 處理任何可以被傳遞的對象.
    ClipboardOwner接口: 任何處理剪貼板的類都必須實現(xiàn)該接口.該接口用于剪貼板中的原始數(shù)據(jù)被替換時發(fā)出通知.
    Dataflavor類: 表現(xiàn)被傳遞的對象支持的所有數(shù)據(jù)類型.
    StringSelection類: java支持的一種可被傳遞的類.
    Transferable接口: 包裝傳遞到剪貼板的對象.
    UnsupportedFlavor Exception類: 由可傳遞對象拋出的異常,表示不對象的數(shù)據(jù)類型(data flavor)

    Clipboard類
    Clipboard是存取剪貼板的鏈接.它包含三個方法:
    String getName()
    void setContents(Transferable, ClipboardOwner)
    Transferable getContent(Object)
    訪問系統(tǒng)剪貼板,可以瘵系統(tǒng)剪貼板的引用賦值給一個Clipboard對象,如:
    Clipboard clipboard = getToolKit().getSystemClipboard();
    創(chuàng)建一個本地剪貼板,可以通過傳遞剪貼板的名稱到構(gòu)造方法中:
    Clipboard clipboard = new Clipboard("My first clipboard");

    ClipboardOwner接口
    ClipboardOwner唯一的功能就是當(dāng)(剪貼板)擁有者的數(shù)據(jù)被其它類覆蓋時通知它.同時它可以用用通知應(yīng)用程序釋放關(guān)聯(lián)到數(shù)據(jù)的資源的信號.
    在具體應(yīng)用中,lostOwnership方法可以用于設(shè)置標(biāo)志,該標(biāo)志用于通知應(yīng)用有關(guān)剪貼板中數(shù)據(jù)的可見性


    java.awt.datatransfer.Clipboard clipboard=java.awt.Toolkit.getDefaultToolkit().getSystemClipboard(); //獲得系統(tǒng)剪切板

    //下面是我的記事本部分功能.e.getSource()是當(dāng)觸發(fā)了某個事件.這里是copy的代碼,下面依此是粘貼,等代碼.可以看你需要的部分.(關(guān)于clopboard的).都是漢語拼音命名的變良.

    else if(e.getSource()==fuZhi||e.getSource()==fuZhi2)//////////Copy 'fuZhi' is 'Copy'
    {
    String temp=text.getSelectedText();
    stringSelection=new StringSelection(temp);
    clipboard.setContents(stringSelection,null);
    }

    else if(e.getSource()==jianQie||e.getSource()==jianQie2)//////////'jianQie' is 'Cut'
    {
    String temp=text.getSelectedText();
    stringSelection=new StringSelection(temp);
    clipboard.setContents(stringSelection,null);
    int start=text.getSelectionStart();
    int end=text.getSelectionEnd();
    text.replaceRange("",start,end);
    }
    //這里是粘貼.主要是如何從系統(tǒng)剪切板里取得數(shù)據(jù).
    else if(e.getSource()==zhanTie||e.getSource()==zhanTie2)///////////////'zhanTie' is 'Paste'.
    {
    java.awt.datatransfer.Transferable transferable=clipboard.getContents(this);
    java.awt.datatransfer.DataFlavor flavor=java.awt.datatransfer.DataFlavor.stringFlavor;
    if(transferable.isDataFlavorSupported(flavor))
    {
    try
    {
    int start=text.getSelectionStart();
    int end=text.getSelectionEnd();
    text.replaceRange("",start,end);
    String str;
    int n=text.getCaretPosition();
    str=(String)transferable.getTransferData(flavor);
    text.insert(str,n);
    }
    catch(Exception ee)
    {

    }
          }
    }
    java.awt.datatransfer.Transferable transferable=clipboard.getContents(this);//傳送操作提供數(shù)據(jù)的類定義接口.放在剪切板的東西都實現(xiàn)了這個接口.

    java.awt.datatransfer.DataFlavor flavor=java.awt.datatransfer.DataFlavor.stringFlavor//在數(shù)據(jù)拖放期間,或在文件系統(tǒng)中,當(dāng)每個實例顯示在剪切板上時,它代表了數(shù)據(jù)格式的不透明概念.其實就是在系統(tǒng)內(nèi)存中的東西是哪種類型.比如:文本,圖片等.就象網(wǎng)頁中的contentType="text/html"等一樣.這里的stringFlavor是字符類型.
     
     
    通過操作系統(tǒng)的剪切板,可以實現(xiàn)在不同的程序中拷貝和粘貼數(shù)據(jù)。一些用Java寫的程序例如很多開發(fā)環(huán)境也可以訪問到剪切板,本文就是研究如何在Java程序中讀寫系統(tǒng)剪切板的數(shù)據(jù)。
    通過操作系統(tǒng)的剪切板,可以實現(xiàn)在不同的程序中拷貝和粘貼數(shù)據(jù)。一些用Java寫的程序例如很多開發(fā)環(huán)境也可以訪問到剪切板,本文就是研究如何在Java程序中讀寫系統(tǒng)剪切板的數(shù)據(jù)。

    Java中使用java.awt.datatransfer.Clipboard類來描述剪切板,并把剪切板分為兩種類型:本地和系統(tǒng),本地剪切板使用 Clipborad cp = new Clipboard("clip1"); 來構(gòu)造;系統(tǒng)剪切板通過

    Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard();

    獲取,下面我們給出幾個常用的方法用于讀寫剪切板中的文本數(shù)據(jù)以及圖像數(shù)據(jù)

    1. 從指定的剪切板中獲取文本內(nèi)容

    protected static String getClipboardText(Clipboard clip) throws Exception{
       // 獲取剪切板中的內(nèi)容
       Transferable clipT = clip.getContents(null);
       if (clipT != null) {
        // 檢查內(nèi)容是否是文本類型
        if (clipT.isDataFlavorSupported(DataFlavor.stringFlavor))
         return (String)clipT.getTransferData(DataFlavor.stringFlavor);
       }
       return null;
    }


    2. 往剪切板寫文本數(shù)據(jù)

    protected static void setClipboardText(Clipboard clip, String writeMe) {
       Transferable tText = new StringSelection(writeMe);
       clip.setContents(tText, null);
    }


    3. 從剪切板讀取圖像

    public static Image getImageFromClipboard() throws Exception{
       Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard();
       Transferable cc = sysc.getContents(null);
       if (cc == null)
        return null;
       else if(cc.isDataFlavorSupported(DataFlavor.imageFlavor))
        return (Image)cc.getTransferData(DataFlavor.imageFlavor);
       return null;
    }


    4. 寫圖像到剪切板

    protected static void setClipboardImage2(final Image image) {
       Transferable trans = new Transferable(){
        public DataFlavor[] getTransferDataFlavors() {
         return new DataFlavor[] { DataFlavor.imageFlavor };
        }
        public boolean isDataFlavorSupported(DataFlavor flavor) {
         return DataFlavor.imageFlavor.equals(flavor);
        }
        public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
         if(isDataFlavorSupported(flavor))
          return image;
         throw new UnsupportedFlavorException(flavor);
        }
       
       };
       Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans, null);
    }
     

    有了這四個方法,你下面可以自己寫一些程序來進(jìn)行測試,利用它來實現(xiàn)與其他程序結(jié)合測試對剪切板數(shù)據(jù)的操作。這里給出一個用于顯示圖像的類,只要把Image實例作為參數(shù)傳入即可。

    /*
    * Created on 2004-12-23
    * 查看圖形的窗口
    */
    package javayou.clipboard;

    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.MediaTracker;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;

    /**
    * @author Winter Lau 用于顯示圖形的窗口
    */
    public class ImageViewer extends Frame {

    private Image image;

    /**
       * 顯示一個圖像
       * @param viewMe
       */
    public ImageViewer(Image viewMe) {
       image = viewMe;
       MediaTracker mediaTracker = new MediaTracker(this);
       mediaTracker.addImage(image, 0);
       try {
        mediaTracker.waitForID(0);
       } catch (InterruptedException ie) {
        ie.printStackTrace();
        System.exit(1);
       }
       addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
         System.exit(0);
        }
       });
       //窗口適應(yīng)圖像大小
       setSize(image.getWidth(null), image.getHeight(null));
       //窗口標(biāo)題
       setTitle("Viewing Image from Clipboard");  
       setVisible(true);
    }

    public void paint(Graphics graphics) {
       graphics.drawImage(image, 0, 0, null);
    }

    /**
       * 用于讀取圖像文件并生成Image對象
       */
    public static Image getImageFromFile(String fileName) {
       Toolkit toolkit = Toolkit.getDefaultToolkit();
       Image image = toolkit.getImage(fileName);
       return image;
    }

    }
    主站蜘蛛池模板: 亚洲一区二区三区香蕉| 日产亚洲一区二区三区| a级毛片免费完整视频| 亚洲的天堂av无码| 午夜老司机免费视频| 中文字幕永久免费| 亚洲免费视频网址| 久久久久亚洲精品中文字幕| 亚洲黄色免费网址| 免费视频成人国产精品网站| 久久精品亚洲一区二区三区浴池 | 亚洲色最新高清av网站| 亚洲精品成人a在线观看| 91热久久免费精品99| 国产亚洲精品美女2020久久| 亚洲av网址在线观看| 日本特黄a级高清免费大片| 久久成人无码国产免费播放| 久久精品国产亚洲av天美18| 亚洲人成在线观看| 在线a亚洲v天堂网2018| 亚洲中文字幕无码永久在线| 成人午夜18免费看| 美女视频免费看一区二区| 免费大片黄手机在线观看| 91在线手机精品免费观看| 永久免费观看黄网站| 亚洲男人天堂2018av| 亚洲va在线va天堂va四虎| 亚洲成人高清在线| 大陆一级毛片免费视频观看| 日日麻批免费40分钟无码| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 亚洲人成人无码网www电影首页| 最近免费中文字幕视频高清在线看 | 亚在线观看免费视频入口| 免费一级全黄少妇性色生活片| 中文文字幕文字幕亚洲色| 亚洲伦理一区二区| 亚洲人成人网站色www | 亚洲国产精品免费观看|