Swing/ClipboardService の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/ClipboardService へ行く。
- Swing/ClipboardService の差分を削除
--- 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`で動作中のアプリケーションからシステム全体の共有クリップボードにアクセスします。 #download(https://lh5.googleusercontent.com/--_lXbzG-H7g/T53noZrOnHI/AAAAAAAABME/FyY8MKdHSg0/s800/ClipboardService.png) * サンプルコード [#sourcecode] #code(link){{ private ClipboardService cs; }} #code{{ 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) { cs.setContents(new StringSelection(getSelectedText())); } super.copy(); } @Override public void cut() { if (cs != null) { cs.setContents(new StringSelection(getSelectedText())); } super.cut(); } @Override public void paste() { if (cs != null) { Transferable tr = cs.getContents(); if (tr.isDataFlavorSupported(DataFlavor.stringFlavor)) { try { getTransferHandler().importData(this, tr); } catch (Exception e) { e.printStackTrace(); } } } else { super.paste(); } } }; }} * 解説 [#explanation] `Java Web Start`から起動された制限付きのランタイム内で動作中するアプリケーションからはシステム全体の共有クリップボードにアクセスできないので、`ServiceManager`から`ClipboardService`を取得し、コピー、ペースト、カットなどでセキュリティ警告ダイアログを表示して、ユーザーにアクセス許可を求めます。 - アプリケーションのクリップボードするカット -- セキュリティ警告で`OK`、取り消しのどちらを選択しても`JTextArea`の選択文字列はカットされアプリケーションのクリップボードは上書きされる - システム全体の共有クリップボードするカット -- セキュリティ警告で`OK`を選択するとシステム全体の共有クリップボードは上書きされ取り消しを選択すると上書きされない * 参考リンク [#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 開発者ガイド] * コメント [#comment] #comment #comment