<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Java提供的剪貼板[轉]

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

    Java提供的剪貼板

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

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

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

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


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

    //下面是我的記事本部分功能.e.getSource()是當觸發了某個事件.這里是copy的代碼,下面依此是粘貼,等代碼.可以看你需要的部分.(關于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);
    }
    //這里是粘貼.主要是如何從系統剪切板里取得數據.
    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);//傳送操作提供數據的類定義接口.放在剪切板的東西都實現了這個接口.

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

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

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

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

    1. 從指定的剪切板中獲取文本內容

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


    2. 往剪切板寫文本數據

    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);
    }
     

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

    /*
    * 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);
        }
       });
       //窗口適應圖像大小
       setSize(image.getWidth(null), image.getHeight(null));
       //窗口標題
       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;
    }

    }
    主站蜘蛛池模板: 日韩电影免费在线观看视频| 69免费视频大片| 男人的天堂亚洲一区二区三区| 亚洲Av无码专区国产乱码DVD| 一级免费黄色大片| 亚洲成a人一区二区三区 | 亚洲国产午夜电影在线入口| 国产成人免费视频| 亚洲黄网在线观看| 久久久久国色AV免费观看性色| 国产精品亚洲片夜色在线| 最近免费中文字幕大全视频| 亚洲AV无码成人网站在线观看| 四虎影视在线永久免费看黄| 产传媒61国产免费| 国产AV无码专区亚洲AVJULIA | 最近更新免费中文字幕大全| 精品亚洲综合在线第一区| 久久这里只精品热免费99| 亚洲成电影在线观看青青| 成人免费看吃奶视频网站| 四虎精品成人免费视频| 国产亚洲高清不卡在线观看| 香蕉97超级碰碰碰免费公| 国产亚洲欧美在线观看| 亚洲精品成人无码中文毛片不卡| 久久A级毛片免费观看| 亚洲国产成人精品无码区花野真一| 四虎精品亚洲一区二区三区| 中文字幕不卡免费视频| 亚洲国产情侣一区二区三区| 亚洲第一福利网站在线观看| 无码专区AAAAAA免费视频| 亚洲色欲色欲www在线播放| 国产亚洲人成网站在线观看| 19禁啪啪无遮挡免费网站| 国产成人综合亚洲绿色| 91在线亚洲精品专区| 亚洲国产成人精品女人久久久| 久久国产免费观看精品| 亚洲乱理伦片在线观看中字|