V tem članku boste dobro razumeli, kako pošiljati in pridobivati informacije iz odložišča v Javi. Naučili se boste tudi, kako ravnati z različnimi razpoložljivimi okusi podatkov. Na koncu bomo obravnavali več osebnosti odložišč in kako zagotavljajo podporo za več kot en podatkovni okus.
Java ponuja dve vrsti odložišč: lokalno in sistemsko. Lokalne odložišča so na voljo samo v navideznem računalniku, v katerem se izvaja vaš programček ali aplikacija. V nasprotju z nekaterimi operacijskimi sistemi, ki vas omejujejo na samo eno odložišče, vam Java omogoča, da imate toliko lokalnih odložišč, kot želite. Dostop do določenega lokalnega odložišča je tako preprost kot sklic nanj po imenu.
Sistemske odložišča so neposredno povezani z enakovrednim operacijskim sistemom, kar vaši aplikaciji omogoča prenos informacij med vse programe, ki se izvajajo v tem operacijskem sistemu. Slaba stran uporabe sistemskega odložišča je, da lahko prenašate samo besedilne podatke. Sistemsko odložišče ne podpira drugih vrst predmetov. Z nekaj sreče bo ta težava obravnavana v naslednji izdaji JDK.
Preden nadaljujemo, si oglejmo vse razrede, ki sodelujejo pri manipulaciji z odložiščem. Ti razredi, navedeni v spodnji tabeli, so vsi java.awt.datatransfer paket.
Seznam vseh razredov v paketu java.awt.datatransferIme | Tip | Opis |
Odložišče | Razred | Ukvarja se z vsem, kar je prenosljivo |
Odložišče Lastnik | Vmesnik | Vsak razred, ki se ukvarja z odložiščem, mora uporabiti ta vmesnik. Ta vmesnik se uporablja za obveščanje o prepisu podatkov, ki so bili prvotno nameščeni v odložišče |
Dataflavor | Razred | Predstavlja vse vrste podatkov, ki jih je mogoče prenesti |
StringSelection | Razred | Ena vrsta prenosljivosti, ki je priložena Javi |
Prenosljiv | Vmesnik | Ovoj za predmete, ki se prenesejo v odložišče |
Nepodprt okus Izjema | Razred | Izjema, ki jo vrne prenosljiv zaradi nepodprte arome podatkov |
Več o razredih odložišča
Pojdimo globlje v naše raziskovanje java.awt.datatransfer
paket, tako da si podrobno ogledate vsak razred.
Razred odložišča
The Odložišče
class je vaša povezava do dostopa do odložišča. Vključuje tri metode, ki so opredeljene v naslednji tabeli:
Metoda | Opis |
String getName () | Poiščite ime odložišča |
void setContents (prenosljiv, ClipboardOwner) | Vsebino odložišča nastavite skupaj z lastniškim predmetom |
Prenosljiv getContent (objekt) | Pridobite vsebino odložišča v obliki prenosljivega predmeta. Predmet, ki se posreduje kot parameter, je lastnik |
Trije Odložišče
Zgornje metode razreda omogočajo poimenovanje odložišča, pošiljanje informacij nanj ali pridobivanje informacij iz njega. Dostop do sistemskega odložišča ali ustvarjanje lokalnega odložišča je drugačen in zahteva nekoliko več razprav. Za dostop do sistemskega odložišča dodelite sklic iz sistemskega odložišča na Odložišče
razred, kot so:
Odložišče odložišče = getToolkit () .getSystemClipboard ();
Po drugi strani pa morate za ustvarjanje lokalnega odložišča ustvariti samo Odložišče
predmet z imenom, ki mu ga želite dodeliti, na primer:
Odložišče odložišče = novo odložišče ("Moja prva odložišča");
Dostop do sistemskega odložišča ali ustvarjanje lokalnega odložišča je drugačen, a enostaven.
Vmesnik ClipboardOwner
Ker je Java večplatformni jezik in ker se operacijski sistemi različno obnašajo do odložišč, so morali avtorji jezika Java najti mehanizem za spopadanje s subtilnimi razlikami. To je razlog za prisotnost Odložišče Lastnik
vmesnik. Njegova edina naloga je, da obvesti lastnika odložišča, ko njegove podatke prepiše nekdo drug. Aplikaciji lahko tudi sporoči, kdaj naj sprosti vir, povezan s podatki.
V resnični aplikaciji je izgubljeno lastništvo
z metodo lahko nastavite zastavico, ki obvesti vašo aplikacijo o razpoložljivosti podatkov v odložišču. Microsoft Word, čeprav ni napisan v Javi, je dober primer tega mehanizma, ki deluje v aplikaciji. Vsakič, ko nekaj vstavite v odložišče v Wordu in nato zaprete, se prikaže pogovorno okno, ki vas obvesti, da so podatki v odložišču. Nato boste pozvani, ali želite podatke pustiti v odložišču.
Izvajanje Odložišče Lastnik
vmesnik je razmeroma enostaven, ker je na voljo le ena metoda. Ta metoda bo povzročila, da se bo vaš program odpovedal lastništvu odložišča.
Razred DataFlavor
The DataFlavor
razred se uporablja za predstavitev tip predmeta. Niste omejeni na en podatkovni okus (ali vrsto) na predmet. Tako kot mi imamo lahko tudi vaši predmeti več osebnosti! Na primer, slikovni razred je lahko predstavljen kot razred Java ali kot niz bitov (GIF, JPEG itd.). V resnici a DataFlavor
class je ovoj za tip MIME. Standard MIME je obsežen, zato podatkov, ki jih je mogoče prenesti v odložišče, praktično ni. (Razprava o standardu MIME ni zajeta v tem članku, dodatne informacije pa najdete v razdelku Viri.)
Kot primer podatkovne arome boste ugotovili, da StringSelection
razred ima dva okusa, ki temeljita na vrstah MIME. V izvedbi je "application / x-java-serialized-object", drugi pa "text / plain; charset = unicode". Ta izvedba nam pravzaprav sporoča, da lahko besedilo iz odložišča pridobimo kot Vrvica
razred (application / x-java-serialized-object
) ali kot navadno besedilo (besedilo / navaden; charset = unicode
).
Obstajata dva načina za ustvarjanje DataFlavor
. Lahko napišete:
javni DataFlavor (predstavništvoClass, niz humanRepresentationName)
Ta konstruktor bo ustvaril nov podatkovni okus, ki predstavlja razred Java. Vrnjeni DataFlavor
bo imel predstavništvoClass = predstavništvoClass
in a mimeType = application / x-java-serialized-object
. Kot primer bi naslednji ustvaril datoteko DataFlavor
za java.awt.Button
:
DataFlavor (Class.forName ("java.awt.Button"), "Gumb AWT");
Zdaj pa ta drugi konstruktor
javni DataFlavor (String mimeType, String humanRepresentationName)
bo zgradil a DataFlavor
z uporabo a MimeType
. Vrnjeni DataFlavor
bo temeljila na MimeType
. Če je MimeType
je application / x-java-serialized-object
, bo rezultat enak, kot če bi poklicali prejšnji konstruktor. Kljub temu vrnjeni DataFlavor
bo predstavništvoClass = InputStream in mimeType = mimeType
. Kot primer bi naslednji klic ustvaril navaden tekst:
javni DataFlavor ("text / plain; charset = unicode", "Unicode");
Naslednja tabela prikazuje metode DataFlavor
razred.
Metode | Opis |
logično enako (DataFlavor) | Preizkusite, ali je podani DataFlavor enak DataFlavor, ki ga predstavlja ta razred |
String getHumanPresentableName () | Vrnite človeško predstavljivo ime za obliko, ki jo predstavlja ta DataFlavor |
void setHumanPresentableName (niz) | Nastavite ime človeške predstavitve za ta DataFlavor |
String getMimeType () | Pridobite niz tipa MIME, ki ga predstavlja ta DataFlavor |
Razred getRepresentationClass () | Vrnite razred, ki predstavlja ta razred |
Prenosni vmesnik
The Prenosljiv
vmesnik morajo izvajati vsi razredi, ki jih želite poslati v odložišče, torej Odložišče
razred bo razumel samo razrede, ki jih je zavil Prenosljiv
vmesnik. The Prenosljiv
vmesnik je sestavljen iz treh metod:
Metode | Opis |
DataFlavor getTransferDataFlavor () | Vrne matriko DataFlavor, ki predstavlja objekt |
logična isDataFlavorSupported (DataFlavor) | Preverite, ali je podprti DataFlavor |
Objekt getTransferData (DataFlavor) | Vrnite objekt, ki ga predstavlja priloženi DataFlavor |
S tem smo zaključili ogled vseh razredov, ki sodelujejo pri ravnanju z odložiščem. Videli smo, da moramo za dostop do odložišča ustvariti datoteko Odložišče
predmet ali pridobite sklic na sistemsko odložišče. Ker odložišče sprejema samo predmete tipa Prenosljiv
, objekt, ki ga želite poslati v odložišče, mora izvajati ta vmesnik. Končno imajo vsi predmeti v odložišču okuse, ki jih predstavlja DataFlavor
razred, ki je v resnici ovoj za tipe MIME.
V naslednjih poglavjih bomo v praksi uresničili naučeno.
Recept za uporabo odložišča
Način, kako ti različni razredi dostopajo do odložišča, je lahko zmeden. Na srečo obstaja preprost recept, ki vključuje naslednje korake:
Korak 1. Ustvarite razred z imenom xxxxSelection. Tu naj xxx poimenuje vrsto, ki jo predstavlja ta okus. Na primer, Izbira slike
bi bilo dobro ime za aromo slike. Ta konvencija o poimenovanju je seveda zgolj predlog. Sledim ustaljeni konvenciji o uporabi z StringSelection
je predviden v JDK, vendar lahko temu razredu poimenujete karkoli želite. Pomembno je vedeti, da mora ta objekt izvajati Prenosljiv
in Odložišče Lastnik
vmesniki. Če nameravate prenesti besedilo, StringSelection
namesto tega uporabite razred.
Korak 2. Določite razred za dostop do odložišča. Če želite dostopati do lokalnega odložišča, uporabite ta klic: Odložišče odložišče = novo odložišče ("ime")
. Če želite dostopati do odložišča enakovrednega operacijskega sistema, raje uporabite ta klic: Odložišče odložišče = getToolkit () .getSystemClipboard ()
.
Korak 3. Nastavite vsebino odložišča. Če želite to narediti, uporabite setContent
metoda v Odložišče
razred, kjer je prvi parameter objekt, ki izvaja a Prenosljiv
(xxxxSelection
razred, ustvarjen v koraku 1), drugi parameter pa je sklic na razred, ki kliče to metodo.
Korak 4. Pridobite vsebino odložišča. Uporabi getContent
metoda v Odložišče
razred. Ta metoda vrne razred tipa Prenosljiv
.
Korak 5. Izvedite "operacijo rezanja". Če želite to narediti, morate podatke ročno izbrisati, ko so kopirani v odložišče. Java ne zagotavlja izvedbe operacije rezanja.
Po tem kratkem ogledu razredov, ki vključujejo manipulacijo z odložiščem, bomo po predlaganem receptu napisali preprost programček, ki besedilo prenese v sistemsko odložišče.
Seznam 1
Oglejmo si ta programček:
Seznam 1
Sledi razlaga določenih vrstic kode v seznamu 1.
Vrstica 9: Določite razred aplet1
razširiti Applet
razred in izvajati Odložišče Lastnik
vmesnik.
Vrstica 17: Določite objekt odložišča.
Vrstica 26: Objekt odložišča nastavite na odložišče enakovrednega operacijskega sistema.
Vrstice 45 do 47: V tem vmesniku izvedite edino metodo. V tem članku ne uporabljamo izgubljeno lastništvo
preprosto natisnite sporočilo na konzoli. S to metodo lahko eksperimentirate tako, da s tem programčkom kopirate nekaj besedila v odložišče in nato kopirate nekaj drugega iz druge aplikacije. Sporočilo o izgubljenem lastništvu bi se moralo prikazati v konzoli Java, ker je druga aplikacija prepisala podatke, ki so bili postavljeni v odložišče (z uporabo Java-programčka).
Vrstica 52: Določite razred vrste StringSelection
ki izvajajo aromo besedilnih podatkov. Nato dobimo vsebino polja z izvornim besedilom.
Vrstica 53: Vsebino odložišča nastavite na fieldContent
razred, ki smo ga definirali v prejšnji vrstici. Upoštevajte, da moramo lastniku tega razreda priskrbeti, v tem primeru ta programček.
Vrstica 61: Določite objekt tipa Prenosljiv
za prejemanje vsebine odložišča.
Vrstica 63: Potrdite dve stvari. Prvič, ali je odložišče prazno? Drugič, ali je vsebina odložišča pravi okus? V tem primeru iščemo stringFlavor
.
Vrstica 67: Vsebino odložišča dobite v spremenljivki niza. Za to pokličemo getTransferData
z zahtevanim okusom. V tem primeru potrebujemo DataFlavor.stringFlavor
tip.
Vrstica 69: Vsebino ciljnega besedilnega polja nastavite na vsebino odložišča.
S tem programčkom lahko eksperimentirate tako, da prenesete besedilo med tem programčkom in drugim programčkom Java ali med programčkom Java in domačim programom, kot je Notepad, za tiste, ki uporabljajo Microsoft Windows.
Seznam 2
V drugem primeru bomo napisali programček, ki kopira sliko v odložišče. Slika bo izvedla svoj okus.
Seznam 2
Sledi razlaga določenih vrstic kode v seznamu 2.
Vrstica 27: Ustvarite objekt odložišča, ki se sklicuje na lokalno odložišče.
Vrstica 41: Nastavite kisla slika
nadzor do Image.gif
.
Vrstice 44 do 50: Izvedite izgubljeno lastništvo
metoda. Na konzoli Java preprosto natisnemo sporočilo.
6. vrstica: Ustvari Izbira slike
predmet, ki temelji na sliki v sourceImage
nadzor.
Vrstica 57: Vsebino odložišča nastavite z Izbira slike
predmet.
Vrstica 66: Pridobite vsebino odložišča.
Vrstica 68: Prepričajte se, da vsebina ni nična in da je podprt iskalni okus.
Vrstica 71: Pridobite podatke v ustreznem okusu.
Vrstica 72: Nastavite destinationImage
nadzor nad pravkar pridobljeno vsebino.
Vrstica 90: Določite Izbira slike
razred.
Vrstica 93: Določite polje DataFlavor
poklical supportedFlavors
z enim elementom (imageFlavor
).
Vrstica 102: Ustvarite okus slike. Ustvarjeni okus temelji na java.awt.Image
z imenom predstavitve "Slika".
Vrstice 111 do 130: Izvedite Prenosljiv
metode.
Vrstica 123: S to metodo vrnite vsebino odložišča.
Vrstica 125: Potrdite okus. Če je zahtevani okus podprt, se slikovni predmet vrne. V nasprotnem primeru se vrže izjema.
V seznamu 1 smo uporabili privzeto aromo podatkov (StringSelection
) za pošiljanje besedila v sistemsko odložišče. Na seznamu 2 smo šli še dlje z izvajanjem lastne arome podatkov java.awt.Image
.