Programmēšana

Java 61. padoms: izgrieziet, kopējiet un ielīmējiet Java

Šis raksts ļaus jums labi izprast, kā nosūtīt un iegūt informāciju no Java starpliktuves. Jūs arī uzzināsiet, kā rīkoties ar dažādiem pieejamajiem aromātiem. Visbeidzot, mēs aplūkosim vairākas starpliktuvju personības un to, kā tās nodrošina atbalstu vairāk nekā vienam datu aromātam.

Java piedāvā divu veidu starpliktuves: lokālo un sistēmas. Vietējie starpliktuves ir pieejami tikai virtuālajā mašīnā, kurā darbojas jūsu sīklietotne vai lietojumprogramma. Tomēr atšķirībā no dažām operētājsistēmām, kas ierobežo tikai vienu starpliktuvi, Java ļauj jums izveidot tik daudz vietējo starpliktuvju, cik vēlaties. Piekļuve noteiktai vietējai starpliktuvei ir tikpat vienkārša kā atsauce uz to pēc nosaukuma.

Sistēmas starpliktuves ir tieši saistīti ar vienaudžu operētājsistēmu, ļaujot jūsu lietojumprogrammai pārsūtīt informāciju starp visām lietojumprogrammām, kas darbojas šajā operētājsistēmā. Viens sistēmas starpliktuves izmantošanas trūkums ir tas, ka jūs varat pārsūtīt tikai teksta datus. Citu veidu objektus sistēmas starpliktuve neatbalsta. Ar lielu veiksmi šis jautājums tiks apskatīts nākamajā JDK laidienā.

Pirms dodamies tālāk, apskatīsim visas klases, kas iesaistītas manipulācijās ar starpliktuvi. Šīs klases, kas uzskaitītas zemāk esošajā tabulā, ir visas java.awt.datatransfer iepakojums.

Visu klašu saraksts paketē java.awt.datatransfer
NosaukumsTipsApraksts
StarpliktuveKlaseNodarbojas ar visu, kas ir nododams
Starpliktuve ĪpašnieksSaskarneKatrai klasei, kas nodarbojas ar starpliktuvi, ir jāievieš šī saskarne. Šo interfeisu izmanto, lai paziņotu, kad sākotnēji starpliktuvē ievietotie dati ir pārrakstīti
DataflavorKlasePārstāv visus datu tipus, kurus var pārsūtīt
StringSelectionKlaseViena veida pārsūtāms, kas tiek piegādāts kopā ar Java
NododamsSaskarneObjektu iesaiņotājs, kas nodots starpliktuvē
Neatbalstīts aromāts IzņēmumsKlaseIzņēmums, ko rada pārsūtāms neatbalstīts datu aromāts

Vairāk par starpliktuves nodarbībām

Iesim dziļāk mūsu izpētē java.awt.datatransfer paketi, detalizēti apskatot katru klasi.

Starpliktuves klase

The Starpliktuve klase ir jūsu saite uz piekļuvi starpliktuvei. Tas ietver trīs metodes, kas noteiktas šajā tabulā:

Starpliktuves klase
MetodeApraksts
Virkne getName ()Iegūstiet starpliktuves nosaukumu
void setContents (pārsūtāms, starpliktuves īpašnieks)Iestatiet starpliktuves saturu kopā ar īpašnieka objektu
Pārsūtāms getContent (objekts)Iegūstiet starpliktuves saturu pārsūtāma objekta veidā. Kā parametrs nodotais objekts ir īpašnieks

Trīs Starpliktuve klases metodes ļauj iepriekš nosaukt starpliktuvi, nosūtīt tai informāciju vai iegūt no tās informāciju. Piekļuve sistēmas starpliktuvei vai vietējā starpliktuves izveide ir atšķirīga un prasa mazliet vairāk diskusiju. Lai piekļūtu sistēmas starpliktuvei, piešķiriet sistēmas starpliktuvē atsauci uz Starpliktuve klase, piemēram:

Starpliktuves starpliktuve = getToolkit () .getSystemClipboard ();

No otras puses, lai izveidotu vietējo starpliktuvi, jums jāizveido tikai Starpliktuve objekts ar nosaukumu, kuru vēlaties tam piešķirt, piemēram:

Starpliktuves starpliktuve = new Starpliktuve ("Mana pirmā starpliktuve");

Piekļuve sistēmas starpliktuvei vai vietējā starpliktuves izveidošana ir atšķirīga, bet vienkārša.

ClipboardOwner saskarne

Tā kā Java ir daudzplatforma valoda un operētājsistēmas izturas atšķirīgi attiecībā pret starpliktuvēm, Java valodas autoriem bija jāizdomā mehānisms, kā tikt galā ar smalkām atšķirībām. Tas ir iemesls Starpliktuve Īpašnieks interfeiss. Tās vienīgā funkcija ir informēt starpliktuves īpašnieku, kad viņa datus pārraksta kāds cits. Tas var arī signalizēt lietojumprogrammu, kad atbrīvot ar datiem saistītu resursu.

Reālā lietojumprogrammā zaudēta īpašumtiesības metodi var izmantot, lai iestatītu karodziņu, kas informē jūsu lietojumprogrammu par datu pieejamību starpliktuvē. Lai arī Microsoft Word nav rakstīts Java valodā, tas ir labs šī mehānisma piemērs lietojumprogrammā. Ikreiz, kad kaut ko ievietojat Word starpliktuvē un pēc tam aizverat, tiek parādīts dialoglodziņš, kas informē jūs, ka dati ir starpliktuvē. Pēc tam jums tiks jautāts, vai vēlaties atstāt datus starpliktuvē.

Programmas ieviešana Starpliktuve Īpašnieks saskarne ir samērā vienkārša, jo ir tikai viena metode, kas jāievieš. Šī metode liks jūsu programmai atteikties no starpliktuves īpašumtiesībām.

DataFlavor klase

The DataFlavor klase tiek izmantota, lai attēlotu tips objekta. Jūs neaprobežojaties ar vienu datu garšu (vai veidu) katram objektam. Jūsu priekšmetiem, tāpat kā mums, var būt vairākas personības! Piemēram, attēlu klasi var attēlot kā Java klasi vai kā bitu masīvu (GIF, JPEG un tā tālāk). Patiesībā a DataFlavor klase ir MIME tipa iesaiņotājs. MIME standarts ir plašs, tāpēc datiem, kurus var pārsūtīt uz starpliktuvi, praktiski nav ierobežojumu. (Diskusija par MIME standartu ir ārpus šī raksta darbības jomas, taču papildinformāciju varat atrast sadaļā Resursi.)

Kā datu garšas piemēru jūs atradīsit, ka StringSelection klasei ir divas garšas, pamatojoties uz MIME tipiem. Īstenošanā ir "application / x-java-serialized-object", bet otrais ir "text / plain; charset = unicode". Faktiski šī ieviešana mums norāda, ka mēs varam izgūt tekstu no starpliktuves kā Stīga klase (application / x-java-serialized-object) vai vienkārša teksta veidā (teksts / vienkāršs; charset = unicode).

Ir divi veidi, kā izveidot DataFlavor. Jūs varat rakstīt:

public DataFlavor (RepresentationClass, String humanRepresentationName)

Šis konstruktors izveidos jaunu datu aromātu, kas pārstāv Java klasi. Atgriezās DataFlavor būs reprezentācijas klase = reprezentācijas klase un a mimeType = application / x-java-serialized-object. Kā piemēru šādi izveidotu DataFlavor priekš java.awt.Button:

DataFlavor (Class.forName ("java.awt.Button"), "AWT poga");

Tagad šis otrais konstruktors

public DataFlavor (virknes mimeType, String humanRepresentationName)

konstruēs a DataFlavor izmantojot a MimeType. Atgriezās DataFlavor balstīsies uz MimeType. Ja MimeType ir application / x-java-serialized-object, tad rezultāts būs tāds pats kā tad, ja jūs izsauktu iepriekšējo konstruktoru. Neskatoties uz to, atgriezās DataFlavor būs representationClass = InputStream un mimeType = mimeType. Piemēram, šāds zvans radīs teksta garšu:

public DataFlavor ("text / plain; charset = unicode", "Unicode");

Šajā tabulā ir parādītas metodes DataFlavor klasē.

DataFlavor klase
MetodesApraksts
būla vērtība ir vienāda (DataFlavor)Pārbaudiet, vai piegādātais DataFlavor ir vienāds ar DataFlavor, ko pārstāv šī klase
Virkne getHumanPresentableName ()Atgrieziet cilvēka pārstāvamo nosaukumu formātam, ko pārstāv šis DataFlavor
void setHumanPresentableName (virkne)Šim DataFlavor iestatiet cilvēka attēlojuma nosaukumu
Virkne getMimeType ()Iegūstiet MIME tipa virkni, ko pārstāv šī DataFlavor
Klase getRepresentationClass ()Atgrieziet klasi, kas pārstāv šo klasi

Pārsūtāmā saskarne

The Nododams interfeiss jāievieš visām klasēm, kuras vēlaties nosūtīt uz starpliktuvi, līdz ar to Starpliktuve klase sapratīs tikai tās klases, kuras ir iesaiņojusi Nododams interfeiss. The Nododams saskarni veido trīs metodes:

Nododams interfeiss
MetodesApraksts
DataFlavor getTransferDataFlavor ()Atgrieziet DataFlavor masīvu, kas apzīmē objektu
boolean isDataFlavorSupported (DataFlavor)Pārbaudiet, vai tiek atbalstīts piegādātais DataFlavor
Objekts getTransferData (DataFlavor)Atgrieziet objektu, ko pārstāv piegādātais DataFlavor

Tas noslēdz mūsu ceļojumu pa visām klasēm, kas iesaistītas starpliktuves apstrādē. Mēs esam redzējuši, ka, lai piekļūtu starpliktuvei, mums ir vai nu jāizveido Starpliktuve objektu vai iegūt atsauci uz sistēmas starpliktuvi. Tā kā starpliktuve pieņem tikai veida objektus Nododams, objektam, kuru vēlaties nosūtīt uz starpliktuvi, ir jāievieš šī saskarne. Visbeidzot, visiem starpliktuves objektiem ir garšas, kuras attēlo DataFlavor klase, kas patiesībā ir MIME tipu iesaiņotājs.

Nākamajās sadaļās mēs praktiski pielietosim apgūto.

Starpliktuves izmantošanas recepte

Tas, kā šīs dažādās klases piekļūst starpliktuvei, var būt mulsinoša. Par laimi ir vienkārša recepte, kas ietver šādas darbības:

1. solis. Izveidojiet klasi ar nosaukumu xxxxSelection. Šeit xxx jānosauc veids, ko pārstāv šī garša. Piemēram, ImageSelection būtu labs nosaukums attēla aromātam. Šī vārdu piešķiršanas kārtība, protams, ir tikai ieteikums. Es ievēroju izveidoto konvenciju par lietošanu ar StringSelection JDK, bet jūs varat nosaukt šo klasi kā vien vēlaties. Ir svarīgi atcerēties, ka šim objektam ir jāīsteno Nododams un Starpliktuve Īpašnieks saskarnes. Ja plānojat pārsūtīt tekstu, StringSelection tā vietā jāizmanto klase.

2. solis. Definējiet klasi, lai piekļūtu starpliktuvei. Lai piekļūtu vietējam starpliktuvei, izmantojiet šādu zvanu: Starpliktuves starpliktuve = jauns starpliktuve ("nosaukums"). Lai piekļūtu vienaudžu operētājsistēmas starpliktuvei, izmantojiet šo zvanu: Starpliktuves starpliktuve = getToolkit () .getSystemClipboard ().

3. solis. Iestatiet starpliktuves saturu. Lai to izdarītu, izmantojiet setContent metodi Starpliktuve klase, kur pirmais parametrs ir objekts, kas realizē a Nododams (xxxxSelection klase, kas izveidota 1. solī), un otrais parametrs ir atsauce uz klasi, kas izsauc šo metodi.

4. solis. Iegūstiet starpliktuves saturu. Izmantojiet getContent metodi Starpliktuve klasē. Šī metode atgriezīs tipa klasi Nododams.

5. solis. Izpildiet “izgriešanas operāciju”. Lai to izdarītu, dati ir manuāli jāizdzēš, kad tie ir nokopēti starpliktuvē. Java nenodrošina izgriešanas operācijas ieviešanu.

Pēc šīs īsās ekskursijas pa klasēm, kas saistītas ar manipulācijām ar starpliktuvi, mēs ievērosim ieteikto recepti, lai uzrakstītu vienkāršu sīklietotni, kas tekstu pārsūta uz sistēmas starpliktuvi.

Saraksts 1

Pārbaudīsim šo sīklietotni:

Saraksts 1

Šis ir 1. saraksta īpašo koda rindu skaidrojums.

9. rinda: Definējiet klasi sīklietotne pagarināt Aplets klasē un ieviest Starpliktuve Īpašnieks interfeiss.

17. rindiņa: Definējiet starpliktuves objektu.

26. rindiņa: Iestatiet starpliktuves objektu uz vienaudžu operētājsistēmas starpliktuvi.

45. līdz 47. rinda: Šajā saskarnē ieviesiet vienīgo metodi. Šajā rakstā mēs neizmantojam zaudēta īpašumtiesības metodi, bet vienkārši izdrukājiet ziņojumu konsolē. Varat eksperimentēt ar šo metodi, izmantojot šo sīklietotru, kopējot tekstu uz starpliktuvi un pēc tam nokopējot kaut ko citu no citas lietojumprogrammas. Jums vajadzētu redzēt zaudēto īpašumtiesību ziņojumu Java konsolē, jo datus, kas tika ievietoti starpliktuvē (izmantojot Java sīklietotni), cita programma pārrakstīja.

52. rinda: Definējiet klases klasi StringSelection kas ievieš teksta datu garšu. Pēc tam mēs iegūstam avota teksta lauka saturu.

53. rinda: Iestatiet starpliktuves saturu uz fieldContent klase, kuru mēs definējām iepriekšējā rindā. Ievērojiet, ka mums jāpiegādā šīs klases īpašniekam, šajā gadījumā, šī sīklietotne.

61. rinda: Definējiet objekta tipu Nododams lai saņemtu starpliktuves saturu.

63. rinda: Apstipriniet divas lietas. Pirmkārt, vai starpliktuve ir tukša? Otrkārt, vai starpliktuves saturs ir īsts aromāts? Šajā gadījumā mēs meklējam stringFlavor.

67. rinda: Iegūstiet starpliktuves saturu virknes mainīgajā. Lai to izdarītu, mēs saucam getTransferData metode ar nepieciešamo garšu. Šajā gadījumā mums ir nepieciešams a DataFlavor.stringFlavor tips.

69. rinda: Iestatiet mērķa teksta lauka saturu starpliktuves saturam.

Varat eksperimentēt ar šo sīklietotni, pārsūtot tekstu starp šo sīklietotni un citu Java sīklietotni vai starp Java sīklietotni un vietējo programmu, piemēram, Notepad, tiem, kas darbojas ar Microsoft Windows.

2. saraksts

Otrajā piemērā mēs uzrakstīsim sīklietotni, kas kopē attēlu uz starpliktuvi. Attēls īstenos savu garšu.

2. saraksts

Šis ir 2. saraksta īpašo koda rindiņu skaidrojums.

27. rindiņa: Izveidojiet starpliktuves objektu, kas atsaucas uz vietējo starpliktuvi.

41. rinda: Iestatiet sourImage kontrolēt Image.gif.

44. līdz 50. rinda: Īstenot zaudēta īpašumtiesības metodi. Mēs vienkārši izdrukājam ziņojumu Java konsolē.

6. rinda: Izveidojiet ImageSelection objekts, pamatojoties uz attēlu sourceImage kontrole.

57. rinda: Iestatiet starpliktuves saturu ar ImageSelection objekts.

66. rinda: Iegūstiet starpliktuves saturu.

68. rinda: Pārliecinieties, ka saturs nav tukšs un ka tiek atbalstīts meklētais aromāts.

71. rinda: Iegūstiet datus atbilstošā aromātā.

72. rinda: Iestatiet galamērķisAttēls kontrolēt tikko iegūto saturu.

90. līnija: Definējiet ImageSelection klasē.

93. līnija: Definējiet masīvu DataFlavor sauca atbalstītsGaršas ar vienu elementu (imageFlavor).

102. līnija: Izveidojiet attēla garšu. Izveidotās garšas pamatā ir java.awt.Image ar attēlojuma nosaukumu "Attēls".

111. līdz 130. rinda: Īstenot Nododams metodes.

123. rinda: Izmantojot šo metodi, atgrieziet starpliktuves saturu.

125. līnija: Apstipriniet garšu. Ja pieprasītais aromāts tiek atbalstīts, attēla objekts tiek atgriezts. Pretējā gadījumā tiek izmests izņēmums.

1. sarakstā mēs izmantojām noklusējuma datu garšu (StringSelection), lai tekstu nosūtītu uz sistēmas starpliktuvi. 2. sarakstā mēs devāmies tālāk, ieviešot paši savu datu garšu java.awt.Image.

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