كار با Clipboard در جاوا

سايت مرجع زبان برنامه نويسي جاوا                  Java.TadbirPoya.ir> Articles> Java SE> Java IO> How To Read Text Found System Clipboard 

 بدست آوردن محتويات Text ي موجود در Clipboard

 

 

تکنولوژيهای جاوا
Java SE
Java EE
Java ME
JasperReports

 

لينك هاي مفيد
تدبيرگران پوياپرداز
دانلود هاي جاوا
آموزش جاوا
بازگشت
خانه

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 شماره مقاله  :   40

      تاريخ ايجاد :      1388/05/27

        تاريخ ويرايش :   1388/05/27

        دفعات بروز رساني :    0 

  نويسنده : سيد علي عبدالهي پور

 

  چگونه مي توان توسط جاوا محتويات متني موجود در Clipboard را خواند؟

 

در ابن مقاله نحوه خواندن محتويات موجود در Clipboard مورد بررسي قرار مي گيرد. البته محتويات متني موجود در Clipboard ! قبل از شروع كار بهتر است با واژه Data Transfer آشنا شويم.

Data Transfer به قابليتي در برنامه هاي كاربردي اشاره دارد كه در آن برنامه قادر به انتقال داده هاي انتخاب شده - بدون توجه به روشهاي مختلف انتخاب كردن - باشد. بطور مثال فرض كنيد كه مي خواهيد متني را از يك Textbox به Textbox ديگر منتقل نماييد. يعني عمل CUT را انجام دهيد. انجام چنين كاري با استفاده از تكنيك Data Transfer امكان پذير مي باشد. موارد استفاده اين تكنيك در cut-and-paste و drag-and-drop مي باشد.

پس براي شروع لازم است تا بسته java.awt.datatransfer در برنامه import نماييد. اين بسته شامل دو كلاس اصلي مي باشد.

 

1- كلاس DataFlavor : از اين كلاس براي توصيف نوع و فرمت داده اي كه قصد انتقال آن را داريم، استفاده مي شود.

مكانيزم انتقال داده ها، به روشي دقيق، سريع، مفيد و قابل حمل جهت شناسايي نوع داده اي كه قصد حمل كردن آن را دارد، نيازمند مي باشد. نكته مهم و ضروري در اين ميان آن است كه هر دو طرف عمل انتقال، بايد بصورت دقيق و واضح نوع داده را بدانند. نكته مهم ديگر آن است كه ممكن است برنامه هاي كاربردي دو طرف عمل انتقال، از يك نوع نبوده و داراي ساختارهاي متفاوتي باشند. مثلا برنامه كاربردي مبدا با جاوا توليد شده باشد و طرف مقصد با دلفي. حال توجه به اين نكته بسيار ضروري به نظر مي رسد كه مكانيزم شناسايي نوع و فرمت داده بايد انعطاف پذير و عمومي و قابل فهم توسط هر دو طرف انتقال باشد.

كلاس DataFlavor وظايف فوق را بخوبي انجام مي دهد. اين كلاس براي مشخص كردن نوع و فرمت داده ها، از انواع استاندارد داده يعني MIME TYPE اسفاده مي كند. به عنوان نمونه مي توان به فرمتهاي "text/html" و "image/jpeg" اشاره نمود.

اين كلاس براي راحتي كار در شناسايي نوع و فرمت داده ها يك سري ثوابت براي تعيين نوع‌، انواع معمول داده ها تعريف كرده است. مانند:

1- DataFlavor.stringFlavor

2- DataFlavor.plainTextFlavor

3- DataFlavor.javaFileListFlavor

براي تعيين نوع ساير انواع داده ها، مي توانيد از ثوابت سفارشي كه توسط برنامه نويس تعريف مي شود استفاده نماييد. به عنوان نمونه، به عبارت زير توجه نماييد:

DataFlavor jpegFlavor = new DataFlavor("image/jpeg", "JPEG Image Data");

DataFlavor pointFlavor = new DataFlavor(java.awt.Point.class,"Java Point Object");

 

2- واسط Transferable : اين واسط نيز متد هاي مورد نياز براي انتقال داده ها را تعريف مي كند.

در كلاس قبل فقط نوع و فرمت داده تعيين مي شود و خبري از خود داده و يا انتقال داده وجود ندارد. در واقع عمل انتقال توسط واسط Transferable صورت مي‌پذيرد. داده هايي كه قرار است منتقل شوند توسط اين واسط كپسوله شده و بعد منتقل مي شوند.

همانطور كه در مورد قبل اشاره شد، ممكن است عمل انتقال داده ها بين  محيط هاي متفاوت صورت پذيرد. پس بايد به گونه اي داده ها منتقل شوند تا هر محيطي قادر به استفاده از آنها باشد. راه حل پيشنهادي براي اين مشكل آن است كه داده هاي مورد نظر را در فرمت هاي مختلف ارسال نماييم. بطور مثال فرض كنيد كه قصد انتقال يك String را از محيط جاوا داريد. مقصد نيز ممكن است جاوايي باشد يا محيطي غير از جاوا. پس براي ارسال داده ها بايد از دو فرمت  java String Object يا Stream of Unicode Characters استفاده نماييد. اگر مقصد محيط جاوا بود از نوع اول استفاده مي كند و در غير اينصورت از نوع دوم.

واسط transferable سه متد زير را تعريف مي كند:

1- getTransferDataFlavors : اين متد آرايه اي از اشيايي از نوع Dataflavor باز مي گرداند كه بيانگر نوع داده هايي است كه قصد انتقال آنها را داريم.

2 - isDataFlavorsSupported : همانطور كه از نام متد مشخص است، اين متد بررسي مي كند كه آيا نوع و فرمت داده توسط محيط پشتيباني مي شود؟

3- getTransferData :  اين متد انجام عمل انتقال داده ها را بر عهده دارد. اين متد يك آرگومان ورودي دارد كه نوع داده اي كه قرار است انتقال دهد را مشخص مي كند. اگر نوع داده ارسالي به اين متد، پشتيباني نشود، خطاي زير صادر خواهد شد:

UnsupportedFlavorException

«نكته» به علت اينكه نوع داده text بسيار زياد مورد استفاده قرار مي گيرد، در بسته java.awt.datatransfer كلاسي با نام StringSelection تعبيه شده است كه مختص انتقال داده هاي متني مي باشد. اين كلاس از دو نوع داده DataFlavor.stringFlavor و DataFlavor.plainTextFlavor پشتيباني مي‌كند.

 

برنامه TextTransfer.java نشان مي دهد كه چگونه به Clipboard دسترسي يافته و داده هاي متني موجود در آن را بدست آورده و نمايش دهيم.

 

import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.Toolkit;
import java.io.*;

public final class TextTransfer implements ClipboardOwner {
      public static void main (String... aArguments ){
            TextTransfer textTransfer = new TextTransfer();
           

            //display what is currently on the clipboard
            System.out.println("Clipboard contains:" + textTransfer.getClipboardContents() );

            //change the contents and then re-display
            textTransfer.setClipboardContents("WWW.IranjavaRef.ir");
            System.out.println("Clipboard contains:" + textTransfer.getClipboardContents() );
      }

      /**
      * Empty implementation of the ClipboardOwner interface.
      */
      public void lostOwnership( Clipboard aClipboard, Transferable aContents) {
      //do nothing
      }

      /**
      * Place a String on the clipboard, and make this class the
      * owner of the Clipboard's contents.
      */
      public void setClipboardContents( String aString ){
            StringSelection stringSelection = new StringSelection( aString );
            Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
            clipboard.setContents( stringSelection, this );
      }

      /**
      * Get the String residing on the clipboard.
      *
      * @return any text found on the Clipboard; if none found, return an
      * empty String.
      */
      public String getClipboardContents() {
            String result = "";
            Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
            //odd: the Object param of getContents is not currently used
            Transferable contents = clipboard.getContents(null);
            boolean hasTransferableText = (contents != null) &&contents.isDataFlavorSupported(DataFlavor.stringFlavor);
            if ( hasTransferableText ) {
            try {
                  result = (String)contents.getTransferData(DataFlavor.stringFlavor);
                  }catch (UnsupportedFlavorException ex){
                        //highly unlikely since we are using a standard DataFlavor
                        System.out.println(ex);
                        ex.printStackTrace();
                  } catch (IOException ex) {
                        System.out.println(ex);
                        ex.printStackTrace();
                  }
            }
            return result;
      }
}

تصوير زير خروجي اين برنامه را در محيط NetBeans نمايش مي دهد. دقت كنيد كه قبل از اجراي برنامه رشته زير را در Clipboard قرار داده ايم.

Get the String residing on the clipboard.

 

Get the String residing on the clipboard.

 

براي كسب اطلاعات بيشتر در اين زمينه به مقاله زير مراجعه نماييد.

1- چگونه مي توان توسط جاوا در Clipboard، يك متن يا Text وارد نمود؟ « عمل Copy-Paste »

دانلود برنامه هاي مورد استفاده در اين مقاله

مطالب موجود در اين سايت به جهت ارتقاء سطح علمي برنامه نويسان جاوا تهيه و تنظيم شده است. در صورت تمايل مي توانيد مطالب خود را در جهت اصلاح يا ارتقاء مقالات موجود و يا ايجاد مقالات جديد به آدرس ايميل زير ارسال نماييد.

 JArticles@TadbirPoya.ir

استفاده از مطالب موجود در سايت با ذكر منبع بلامانع است.

Copyright @2008-2009 TadbirPoya.ir Co.All rights reserved