2011-12-07 7 views
7

Ho scritto un'applicazione Java che copia una stringa negli appunti di sistema. Il costruttore utilizzaAppunti Java Proprietario Ruolo?

Clipboard.setContents(Transferable contents, ClipboardOwner owner) 

http://docs.oracle.com/javase/6/docs/api/java/awt/datatransfer/Clipboard.html

ho ottenuto lavorando bene, ma io non sono sicuro di quello che fa il ClipboardOwner? Guardare l'API Java non dice molte informazioni.

http://docs.oracle.com/javase/6/docs/api/java/awt/datatransfer/ClipboardOwner.html

Stranamente anche il superamento di un ClippboardOwner = opere nulli. Quindi non sono esattamente sicuro di quale sia il punto? Qualcuno ha qualche idea?

+0

+1 Buona domanda. Forse Oracle/Java l'ha messo in atto per il futuro, ma mi sono spesso chiesto questo - ho pensato che fosse dovuto al fatto che puoi avere molti appunti locali nella JVM, ma @Sign sembra pensare in modo diverso ?! – Andy

risposta

3

Se l'applicazione o uno dei suoi componenti implementa l'interfaccia ClipboardOwner in modo appropriato, può mostrare all'utente che ha copiato alcuni dati negli Appunti di sistema da un'altra applicazione o da un altro componente della propria applicazione. See this example.

+1

In un'altra parola, Clipboardowner serve per registrare la richiamata per l'evento di perdita della proprietà, ovvero alcune modifiche agli Appunti. Questo può essere un modo affidabile per monitorare l'evento di copia degli appunti. –

2

Quando la persona successiva inserisce qualcosa negli appunti, il proprietario che gli viene consegnato negli appunti verrà informato che non è più presente negli Appunti. Esiste solo un'implementazione nota ed è vuota in base allo this. Quindi sembra una coda rudimentale che è solo una specie di uscire.

+0

Se l'API standard non ha implementazioni, nulla ti impedisce di crearne una tua. – MockerTim

+1

Penso che la ragione per cui la std lib non fornisce altre implementazioni è che generalmente le app vogliono comportamenti diversi. Questo è spesso il caso per le interfacce di ascolto di eventi, ad es. AncestorListener non ha implementazioni nella lib di std. Viene fornito in modo tale che la std lib possa interagire con il codice specifico dell'app. – allyourcode

+0

Anche l'implementazione non fa nulla, vedi [fonte] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/awt/datatransfer/StringSelection. java # StringSelection.lostOwnership% 28java.awt.datatransfer.Clipboard% 2Cjava.awt.datatransfer.Transferable% 29). Esiste un solo metodo nell'interfaccia 'ClipboardOwner', ovvero' lostOwnership (..) ', ed è lasciato vuoto da' StringSelection'. –

0

Un caso di utilizzo di esempio è un'implementazione della finestra di terminale, in cui qualsiasi selezione viene automaticamente copiata negli Appunti. La callback lostOwnership(..) può essere utilizzata per deselezionare, in modo che l'utente sappia che viene mostrata una selezione se e solo se è attualmente negli Appunti. Questo idioma è usato per es. in rxvt (che tuttavia non è scritto in Java).