Programiranje

Java Nasvet 61: Izrežite, kopirajte in prilepite v Javi

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.datatransfer
ImeTipOpis
OdložiščeRazredUkvarja se z vsem, kar je prenosljivo
Odložišče LastnikVmesnikVsak 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
DataflavorRazredPredstavlja vse vrste podatkov, ki jih je mogoče prenesti
StringSelectionRazredEna vrsta prenosljivosti, ki je priložena Javi
PrenosljivVmesnikOvoj za predmete, ki se prenesejo v odložišče
Nepodprt okus IzjemaRazredIzjema, 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:

Odložišče
MetodaOpis
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.

Razred DataFlavor
MetodeOpis
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:

Prenosni vmesnik
MetodeOpis
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.

$config[zx-auto] not found$config[zx-overlay] not found