2011-12-07 4 views
7

문자열을 시스템 클립 보드에 복사하는 Java 응용 프로그램을 작성했습니다. 생성자는 나는 그것이 잘 작동하지만 난 ClipboardOwner이 무엇 확실하지 않다 가지고자바 클립 보드 소유자 목적?

Clipboard.setContents(Transferable contents, ClipboardOwner owner) 

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

사용? Java API를 보면 실제로 많은 정보를 알 수 없습니다.

이상하게

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

심지어 ClippboardOwner = null이 작품을 전달합니다. 그래서 나는 그것의 요점이 정확히 무엇인지 모르겠다. 누구 아이디어가 있습니까?

+0

+1 좋은 질문입니다. 어쩌면 오라클/자바는 미래를 위해 그것을 자리 잡았을 것이다. 그러나 나는 종종 이것을 궁금해했다 - 나는 당신이 JVM에서 많은 로컬 클립 보드를 가질 수 있다고 생각했지만, @Sign은 다르게 생각하는 것 같다. – Andy

답변

3

응용 프로그램 또는 해당 구성 요소 중 하나가 적절한 방법으로 ClipboardOwner 인터페이스를 구현하는 경우 사용자가 다른 응용 프로그램의 시스템 클립 보드 나 사용자 응용 프로그램의 다른 구성 요소에서 일부 데이터를 복사했음을 나타낼 수 있습니다. See this example.

+1

즉, Clipboardowner는 소유권 유실 이벤트에 대한 콜백을 등록하기위한 것입니다. 즉, 클립 보드에 대한 일부 변경입니다. 이것은 클립 보드 복사 이벤트를 모니터하는 신뢰할 수있는 방법 일 수 있습니다. –

2

다음 사람이 무언가를 클립 보드에 넣으면 소유자가 클립 보드에 더 이상 클립 보드에 없다는 메시지가 표시됩니다. 알려진 구현은 하나 뿐이며 this에 따라 비어 있습니다. 그래서 그것은 단지 일종의 흔적 인 흔적 꼬리처럼 보입니다.

+0

표준 API에 구현이없는 경우 사용자가 직접 API를 만들지 않습니다. – MockerTim

+1

std lib가 다른 구현을 제공하지 않는 이유는 앱이 일반적으로 다른 동작을 원하기 때문입니다. 예를 들어, 이벤트 리스닝 인터페이스의 경우에 종종 그렇습니다. AncestorListener는 표준 라이브러리에 구현되어 있지 않습니다. 표준 lib가 응용 프로그램 별 코드와 상호 작용할 수 있도록 제공됩니다. – allyourcode

+0

하나의 구현도 아무 것도하지 않습니다. [소스] (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). 'ClipboardOwner' 인터페이스에는 단 하나의 메소드, 즉'lostOwnership (..)'만 있고'StringSelection'에 의해 비워져 있습니다. –

0

예제 유스 케이스는 터미널 창 구현으로, 선택 항목이 자동으로 클립 보드에 복사됩니다. lostOwnership(..) 콜백을 사용하여 선택을 취소 할 수 있으므로 현재 클립 보드에있는 경우에만 선택 항목이 표시됩니다. 이 관용구는 예를 들어 rxvt (그러나 Java로 작성되지 않음).