• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:ClipboardServiceでシステム全体の共有クリップボードにアクセスする
#navi(../)
RIGHT:Posted by &author(aterai); at 2012-04-30
*ClipboardServiceでシステム全体の共有クリップボードにアクセスする [#keb95371]
ClipboardServiceを使って Java Web Start で動作中のアプリケーションからシステム全体の共有クリップボードにアクセスします。
---
category: swing
folder: ClipboardService
title: ClipboardServiceでシステム全体の共有クリップボードにアクセスする
tags: [ServiceManager, Clipboard, JTextComponent]
author: aterai
pubdate: 2012-04-30T10:43:03+09:00
description: ClipboardServiceを使ってJava Web Startで動作中のアプリケーションからシステム全体の共有クリップボードにアクセスします。
image: https://lh5.googleusercontent.com/--_lXbzG-H7g/T53noZrOnHI/AAAAAAAABME/FyY8MKdHSg0/s800/ClipboardService.png
---
* 概要 [#summary]
`ClipboardService`を使って`Java Web Start`で動作中のアプリケーションからシステム全体の共有クリップボードにアクセスします。

-&jnlp;
-&jar;
-&zip;
#download(https://lh5.googleusercontent.com/--_lXbzG-H7g/T53noZrOnHI/AAAAAAAABME/FyY8MKdHSg0/s800/ClipboardService.png)

//#screenshot
#ref(https://lh5.googleusercontent.com/--_lXbzG-H7g/T53noZrOnHI/AAAAAAAABME/FyY8MKdHSg0/s800/ClipboardService.png)

**サンプルコード [#w95c9c42]
* サンプルコード [#sourcecode]
#code(link){{
private ClipboardService cs;
}}

#code{{
try{
  cs = (ClipboardService)ServiceManager.lookup("javax.jnlp.ClipboardService");
}catch(Throwable t) {
ClipboardService cs;
try {
  cs = (ClipboardService) ServiceManager.lookup("javax.jnlp.ClipboardService");
} catch (Throwable t) {
  cs = null;
}
JTextArea textArea = new JTextArea() {
  @Override public void copy() {
    if(cs != null) {
    if (cs != null) {
      cs.setContents(new StringSelection(getSelectedText()));
    }
    super.copy();
  }

  @Override public void cut() {
    if(cs != null) {
    if (cs != null) {
      cs.setContents(new StringSelection(getSelectedText()));
    }
    super.cut();
  }

  @Override public void paste() {
    if(cs != null) {
    if (cs != null) {
      Transferable tr = cs.getContents();
      if(tr.isDataFlavorSupported(DataFlavor.stringFlavor)) {
        try{
      if (tr.isDataFlavorSupported(DataFlavor.stringFlavor)) {
        try {
          getTransferHandler().importData(this, tr);
        }catch(Exception e) {
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }else{
    } else {
      super.paste();
    }
  }
};
}}

**解説 [#z1e6e45a]
Java Web Start から起動された制限付きのランタイム内で動作中するアプリケーションからは、システム全体の共有クリップボードにアクセスすることができないので、ServiceManagerからClipboardServiceを取得し、コピー、ペースト、カットなどでセキュリティ警告ダイアログを表示して、ユーザーにアクセス許可を求めます。
* 解説 [#explanation]
`Java Web Start`から起動された制限付きのランタイム内で動作中するアプリケーションからはシステム全体の共有クリップボードにアクセスできないので、`ServiceManager`から`ClipboardService`を取得し、コピー、ペースト、カットなどでセキュリティ警告ダイアログを表示して、ユーザーにアクセス許可を求めます。

- Cutの例
-- アプリケーションのクリップボード
--- セキュリティ警告でOK、取り消しのどちらを選択しても、JTextAreaの選択文字列はCutされ、アプリケーションのクリップボードは上書きされる
-- システム全体の共有クリップボード
-- セキュリティ警告でOKを選択するとシステム全体の共有クリップボードは上書きされ、取り消しを選択すると上書きされない
- アプリケーションのクリップボードするカット
-- セキュリティ警告で`OK`、取り消しのどちらを選択しても`JTextArea`の選択文字列はカットされアプリケーションのクリップボードは上書きされる
- システム全体の共有クリップボードするカット
-- セキュリティ警告で`OK`を選択するとシステム全体の共有クリップボードは上書きされ取り消しを選択すると上書きされない

**参考リンク [#n9de5723]
- [http://docs.oracle.com/javase/jp/6/technotes/guides/javaws/developersguide/examples.html#ClipboardService ClipboardService サービスの使い方 - JNLP API の使用例]
- [http://docs.oracle.com/javase/jp/6/technotes/guides/javaws/developersguide/contents.html Java Web Start 開発者ガイド]
* 参考リンク [#reference]
- [https://docs.oracle.com/javase/jp/8/docs/technotes/guides/javaws/developersguide/examples.html#ClipboardService ClipboardService サービスの使い方 - JNLP API の使用例]
- [https://docs.oracle.com/javase/jp/8/docs/technotes/guides/javaws/developersguide/contents.html Java Web Start 開発者ガイド]

**コメント [#s3bd5228]
* コメント [#comment]
#comment
#comment