Tento článok vám poskytne dobré informácie o tom, ako odosielať a získavať informácie zo schránky v prostredí Java. Dozviete sa tiež, ako zaobchádzať s rôznymi dostupnými príchuťami údajov. Na záver sa budeme venovať viacerým osobnostiam schránok a tým, ako poskytujú podporu pre viac ako jednu príchuť údajov.
Java ponúka dva typy schránok: lokálne a systémové. Miestne schránky sú k dispozícii iba vo virtuálnom stroji, na ktorom je spustený váš applet alebo aplikácia. Na rozdiel od niektorých operačných systémov, ktoré vás obmedzujú iba na jednu schránku, vám však Java umožňuje mať toľko miestnych schránok, koľko chcete. Prístup k konkrétnej miestnej schránke je rovnako ľahký ako odkaz na ňu podľa názvu.
Systémové schránky sú priamo prepojené s rovnocenným operačným systémom, čo umožňuje vašej aplikácii prenášať informácie medzi akýmikoľvek aplikáciami bežiacimi v tomto operačnom systéme. Jednou z nevýhod používania systémovej schránky je, že môžete prenášať iba textové údaje. Systémová schránka nepodporuje iné typy objektov. Pri troche šťastia sa touto otázkou bude zaoberať nasledujúce vydanie JDK.
Než pôjdeme ďalej, pozrime sa na všetky triedy zapojené do manipulácie so schránkou. Všetky tieto triedy, ktoré sú uvedené v nasledujúcej tabuľke, sú súčasťou java.awt.datatransfer balíček.
Zoznam všetkých tried v balíku java.awt.datatransfernázov | Typ | Popis |
Schránka | Trieda | Zaoberá sa všetkým, čo je prenosné |
Vlastník schránky | Rozhranie | Každá trieda, ktorá sa zaoberá schránkou, musí implementovať toto rozhranie. Toto rozhranie sa používa na oznamovanie prepísania údajov pôvodne umiestnených do schránky |
Príchuť údajov | Trieda | Predstavuje všetky dátové typy, ktoré podporuje prenos |
StringSelection | Trieda | Jeden typ prenosného zariadenia dodávaného s jazykom Java |
Prenosné | Rozhranie | Ovíjačka na objekty odovzdané do schránky |
Nepodporovaná príchuť Výnimka | Trieda | Výnimka vyvolaná prenosnosťou pre nepodporovanú príchuť údajov |
Viac o triedach schránky
Poďme hlbšie do nášho skúmania java.awt.datatransfer
balíček podrobným prezeraním každej triedy.
Trieda schránky
The Schránka
trieda je váš odkaz na prístup do schránky. Zahŕňa tri metódy, ktoré sú definované v nasledujúcej tabuľke:
Metóda | Popis |
Reťazec getName () | Získajte názov schránky |
void setContents (Transferable, ClipboardOwner) | Nastaviť obsah schránky spolu s objektom vlastníka |
Prenosný getContent (objekt) | Získajte obsah schránky vo forme prenosného objektu. Objekt odovzdaný ako parameter je vlastník |
Tri Schránka
Metódy triedy vyššie vám umožňujú pomenovať schránku, poslať jej informácie alebo z nej získať informácie. Prístup do systémovej schránky alebo vytvorenie miestnej schránky je iný a vyžaduje trochu viac diskusie. Ak chcete získať prístup do systémovej schránky, priraďte odkaz zo systémovej schránky k Schránka
triedy, ako napríklad:
Schránka schránka = getToolkit () .getSystemClipboard ();
Na druhej strane, na vytvorenie miestnej schránky stačí vytvoriť iba Schránka
objekt s menom, ktoré mu chcete priradiť, napríklad:
Schránka schránka = nová schránka ("Moja prvá schránka");
Prístup do systémovej schránky alebo vytvorenie miestnej schránky je iný, ale priamy.
Rozhranie ClipboardOwner
Pretože Java je multiplatformný jazyk a pretože operačné systémy sa správajú odlišne k schránkam, museli autori jazyka Java vymyslieť mechanizmus, ktorý by sa vyrovnal s jemnými rozdielmi. To je dôvod pre prítomnosť Vlastník schránky
rozhranie. Jeho jedinou funkciou je informovať majiteľa schránky, keď jeho údaje prepíše niekto iný. Môže tiež signalizovať aplikácii, kedy má uvoľniť zdroj spojený s údajmi.
V skutočnej aplikácii stratené vlastníctvo
metódou môžete nastaviť príznak, ktorý vašu aplikáciu informuje o dostupnosti údajov v schránke. Program Microsoft Word, aj keď nie je napísaný v jazyku Java, je dobrým príkladom tohto mechanizmu pri práci v aplikácii. Kedykoľvek vložíte niečo do schránky v programe Word a potom skončíte, zobrazí sa dialógové okno s informáciou, že údaje sú v schránke. Potom sa zobrazí otázka, či chcete údaje ponechať v schránke.
Vykonávanie Vlastník schránky
rozhranie je pomerne priame, pretože je možné implementovať iba jednu metódu. Táto metóda spôsobí, že sa váš program vzdá vlastníctva schránky.
Trieda DataFlavor
The DataFlavor
trieda sa používa na reprezentáciu typu predmetu. Nie ste obmedzený na jednu dátovú príchuť (alebo typ) pre každý objekt. A rovnako ako my, aj vaše objekty môžu mať viac osobností! Napríklad trieda obrázka môže byť reprezentovaná ako trieda Java alebo ako pole bitov (GIF, JPEG atď.). V skutočnosti a DataFlavor
trieda je obálka typu MIME. Štandard MIME je rozsiahly, a preto neexistujú prakticky žiadne obmedzenia týkajúce sa údajov, ktoré je možné preniesť do schránky. (Diskusia o štandarde MIME je mimo rozsahu tohto článku, ďalšie informácie však nájdete v časti Zdroje.)
Ako príklad príchute údajov zistíte, že StringSelection
trieda má dve príchute založené na typoch MIME. Pri implementácii sa používa výraz „application / x-java-serialized-object“ a druhý je textový / obyčajný; charset = unicode. Táto implementácia nám hovorí, že môžeme načítať text zo schránky ako String
trieda (application / x-java-serialized-object
) alebo ako obyčajný text (text / obyčajný; charset = unicode
).
Existujú dva spôsoby, ako vytvoriť DataFlavor
. Môžeš písať:
verejná DataFlavor (reprezentáciaClass, reťazec humanRepresentationName)
Tento konštruktor vytvorí novú dátovú príchuť, ktorá predstavuje triedu Java. Vrátený DataFlavor
bude mať representationClass = reprezentáciaClass
a a mimeType = aplikácia / x-java-serializovaný-objekt
. Napríklad nasledovné by vytvorilo a DataFlavor
pre java.awt.Button
:
DataFlavor (Class.forName ("java.awt.Button"), "tlačidlo AWT");
Teraz, tento druhý konštruktér
public DataFlavor (String mimeType, String humanRepresentationName)
postavia a DataFlavor
pomocou a MimeType
. Vrátený DataFlavor
bude vychádzať z MimeType
. Ak MimeType
je application / x-java-serialized-object
, potom bude výsledok rovnaký, ako keby ste volali predchádzajúci konštruktor. Napriek tomu sa vrátil DataFlavor
bude representationClass = InputStream a mimeType = mimeType
. Napríklad nasledujúce volanie by vytvorilo príchuť obyčajného textu:
public DataFlavor ("text / plain; charset = unicode", "Unicode");
V nasledujúcej tabuľke sú uvedené metódy DataFlavor
trieda.
Metódy | Popis |
boolean equals (DataFlavor) | Vyskúšajte, či sa dodaná dátová príchuť rovná dátovej príchuti predstavovanej touto triedou |
Reťazec getHumanPresentableName () | Vráti ľudsky reprezentovateľný názov formátu, ktorý predstavuje táto DataFlavor |
void setHumanPresentableName (reťazec) | Nastavte názov ľudskej reprezentácie pre túto DataFlavor |
Reťazec getMimeType () | Získajte reťazec typu MIME reprezentovaný touto DataFlavor |
Trieda getRepresentationClass () | Vráti Triedu, ktorá predstavuje túto triedu |
Prenosné rozhranie
The Prenosné
rozhranie musia byť implementované vo všetkých triedach, ktoré chcete poslať do schránky, teda Schránka
trieda bude rozumieť iba triedam, ktoré boli zabalené do Prenosné
rozhranie. The Prenosné
rozhranie sa skladá z troch metód:
Metódy | Popis |
DataFlavor getTransferDataFlavor () | Vráti pole DataFlavor, ktoré predstavuje objekt |
boolean isDataFlavorSupported (DataFlavor) | Vyskúšajte, či je podporovaná dodávaná DataFlavor |
Objekt getTransferData (DataFlavor) | Vráti objekt predstavovaný dodanou DataFlavor |
Týmto sa končí naša prehliadka všetkých tried zapojených do práce so schránkou. Videli sme, že aby sme sa dostali do schránky, musíme buď vytvoriť a Schránka
objekt alebo získať odkaz na systémovú schránku. Pretože schránka prijíma iba objekty typu Prenosné
, objekt, ktorý chcete odoslať do schránky, musí implementovať toto rozhranie. Nakoniec majú všetky objekty v schránke príchute, ktoré sú reprezentované symbolom DataFlavor
triedy, čo je v skutočnosti obal pre typy MIME.
V ďalších častiach uvedieme do praxe to, čo sme sa naučili.
Recept na využitie schránky
To, ako tieto rôzne triedy pristupujú do schránky, môže byť mätúce. Našťastie existuje jednoduchý recept, ktorý zahŕňa nasledujúce kroky:
Krok 1. Vytvorte triedu s názvom xxxxSelection. Tu by xxx mal pomenovať typ predstavovaný touto príchuťou. Napríklad, ImageSelection
by bolo dobrým menom pre príchuť obrázka. Táto konvencia pomenovania je samozrejme iba návrhom. Postupujem podľa zavedeného dohovoru o používaní s StringSelection
poskytnuté v JDK, ale túto triedu môžete pomenovať, ako chcete. Je dôležité mať na pamäti, že tento objekt musí implementovať Prenosné
a Vlastník schránky
rozhrania. Ak plánujete prenos textu, StringSelection
namiesto toho by sa mala použiť trieda.
Krok 2. Definujte triedu pre prístup do schránky. Do miestnej schránky sa dostanete pomocou nasledujúceho hovoru: Schránka schránka = nová schránka ("meno")
. Ak chcete získať prístup do schránky peer operačného systému, použite tento hovor: Schránka schránka = getToolkit () .getSystemClipboard ()
.
Krok 3. Nastavte obsah schránky. Ak to chcete urobiť, použite setContent
metóda v Schránka
triedy, kde prvý parameter je objekt, ktorý implementuje a Prenosné
(xxxxVýber
triedy vytvorenej v kroku 1) a druhý parameter je odkazom na triedu volajúcu túto metódu.
Krok 4. Získajte obsah schránky. Použi getContent
metóda v Schránka
trieda. Táto metóda vráti triedu typu Prenosné
.
Krok 5. Implementácia „operácie rezania“. Ak to chcete urobiť, musíte údaje po skopírovaní do schránky manuálne vymazať. Java neposkytuje žiadnu implementáciu operácie vystrihnutia.
Po tejto krátkej prehliadke tried, ktoré zahŕňajú manipuláciu so schránkou, sa podľa navrhovaného receptu pokúsime napísať jednoduchý applet, ktorý prenesie text do systémovej schránky.
Zoznam 1
Poďme preskúmať tento applet:
Zoznam 1
Nasleduje vysvetlenie konkrétnych riadkov kódu v zozname 1.
Riadok 9: Definujte triedu applet1
predĺžiť Applet
triedy a implementovať Vlastník schránky
rozhranie.
Riadok 17: Definujte objekt schránky.
Riadok 26: Nastavte objekt schránky do schránky rovnocenného operačného systému.
Riadky 45 až 47: Implementujte jedinú metódu v tomto rozhraní. V tomto článku nepoužívame stratené vlastníctvo
metódou, ale jednoducho vytlačiť správu na konzolu. S touto metódou môžete experimentovať tak, že skopírujete nejaký text do schránky pomocou tohto appletu a potom skopírujete niečo iné z inej aplikácie. V konzole Java by sa mala zobraziť správa o stratenom vlastníctve, pretože údaje, ktoré boli umiestnené do schránky (pomocou appletu Java), boli prepísané inou aplikáciou.
Riadok 52: Definujte triedu typu StringSelection
ktoré implementujú príchuť textových údajov. Potom dostaneme obsah poľa zdrojového textu.
Riadok 53: Nastavte obsah schránky na obsah poľa
triedy, ktorú sme definovali na predchádzajúcom riadku. Upozorňujeme, že musíme dodať vlastníka tejto triedy, v tomto prípade tohto appletu.
Riadok 61: Definujte objekt typu Prenosné
na príjem obsahu schránky.
Riadok 63: Potvrďte dve veci. Po prvé, je schránka prázdna? Po druhé, je obsah schránky správna príchuť? V tomto prípade hľadáme a strunová príchuť
.
Riadok 67: Získajte obsah schránky v premennej reťazca. Za týmto účelom voláme getTransferData
metóda s požadovanou príchuťou. V tomto prípade potrebujeme a DataFlavor.stringFlavor
typu.
Riadok 69: Nastavte obsah cieľového textového poľa na obsah schránky.
S týmto appletom môžete experimentovať tak, že prenesiete text medzi týmto appletom a iným appletom Java alebo medzi appletom Java a natívnym programom, ako je napríklad Poznámkový blok, pre tých, ktorí používajú systém Microsoft Windows.
Zoznam 2
V druhom príklade napíšeme applet, ktorý skopíruje obrázok do schránky. Obrázok bude mať svoju vlastnú príchuť.
Zoznam 2
Nasleduje vysvetlenie konkrétnych riadkov kódu v zozname 2.
Riadok 27: Vytvorte objekt schránky, ktorý odkazuje na miestnu schránku.
Riadok 41: Nastaviť sourImage
kontrola do Obrázok.gif
.
Riadky 44 až 50: Implementovať stratené vlastníctvo
metóda. Jednoducho vytlačíme správu na konzolu Java.
Riadok 6: Vytvorte ImageSelection
objekt založený na obrázku v sourceImage
kontrola.
Riadok 57: Nastavte obsah schránky pomocou ImageSelection
objekt.
Riadok 66: Získajte obsah schránky.
Riadok 68: Zaistite, aby obsah nebol neplatný a aby bola podporovaná vôňa, ktorú hľadáme.
Riadok 71: Získajte údaje v príslušnej príchuti.
Riadok 72: Nastaviť destinationImage
kontrolu nad práve získaným obsahom.
Riadok 90: Definujte ImageSelection
trieda.
Riadok 93: Definujte pole DataFlavor
zavolal podporované príchute
s jedným prvkom (imageFlavor
).
Riadok 102: Vytvorte chuť obrázka. Vytvorená príchuť je založená na java.awt.obrázok
s názvom reprezentácie „Obrázok“.
Riadky 111 až 130: Implementovať Prenosné
metódy.
Riadok 123: Týmto spôsobom vrátite obsah schránky.
Riadok 125: Overte príchuť. Ak je požadovaná príchuť podporovaná, vráti sa obrazový objekt. V opačnom prípade sa vyvolá výnimka.
V zozname 1 sme použili predvolenú dátovú príchuť (StringSelection
) na odoslanie textu do schránky systému. V zozname 2 sme išli ďalej implementáciou našej vlastnej dátovej arómy java.awt.obrázok
.