Swing/SystemClipboard のバックアップ差分(No.8)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/SystemClipboard へ行く。
- 1 (2012-12-27 (木) 07:41:01)
- 2 (2014-10-11 (土) 16:46:15)
- 3 (2014-12-31 (水) 01:40:40)
- 4 (2015-03-03 (火) 14:14:44)
- 5 (2015-03-29 (日) 15:22:38)
- 6 (2017-02-14 (火) 14:19:48)
- 7 (2017-10-22 (日) 18:43:14)
- 8 (2018-06-28 (木) 13:26:32)
- 9 (2019-04-19 (金) 13:43:27)
- 10 (2020-06-14 (日) 17:06:39)
- 11 (2021-11-30 (火) 07:17:01)
- 追加された行はこの色です。
- 削除された行はこの色です。
---
category: swing
folder: SystemClipboard
title: Clipboardから文字列や画像を取得する
tags: [ServiceManager, ClipboardService, Transferable, JLabel]
author: aterai
pubdate: 2010-09-27T15:53:12+09:00
description: Clipboardから文字列や画像データを取得し、JLabelに表示します。
image: https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTUB2-qFWI/AAAAAAAAAlY/hlwTEjnyC_g/s800/SystemClipboard.png
---
* 概要 [#summary]
`Clipboard`から文字列や画像データを取得し、`JLabel`に表示します。
#download(https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTUB2-qFWI/AAAAAAAAAlY/hlwTEjnyC_g/s800/SystemClipboard.png)
* サンプルコード [#sourcecode]
#code(link){{
private ClipboardService cs = null;
public JComponent makeUI() {
try {
cs = (ClipboardService) ServiceManager.lookup("javax.jnlp.ClipboardService");
} catch (UnavailableServiceException e) {
cs = null;
}
JPanel p = new JPanel(new BorderLayout());
p.add(new JScrollPane(label));
p.add(new JButton(new AbstractAction("get Clipboard DataFlavor") {
@Override public void actionPerformed(ActionEvent e) {
try {
Transferable t = (cs == null)
? Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null)
: cs.getContents();
if (t == null) {
Toolkit.getDefaultToolkit().beep();
return;
}
String str = "";
ImageIcon image = null;
if (t.isDataFlavorSupported(DataFlavor.imageFlavor)) {
image = new ImageIcon((Image) t.getTransferData(DataFlavor.imageFlavor));
} else if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
str = (String) t.getTransferData(DataFlavor.stringFlavor);
}
label.setText(str);
label.setIcon(image);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}), BorderLayout.SOUTH);
return p;
}
}}
* 解説 [#explanation]
上記のサンプルを`Web Start`で実行した場合は、`Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null)`ではなく、`ClipboardService#getContents()`を使って、`Transferable`を取得するようになっています。
- `Transferable`から文字列を取得
-- `Transferable#getTransferData(DataFlavor.stringFlavor)`
- `Transferable`から画像を取得
-- `Transferable#getTransferData(DataFlavor.imageFlavor)`
* 参考リンク [#reference]
- [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/datatransfer/Clipboard.html Clipboard (Java Platform SE 8)]
- [http://www.ne.jp/asahi/hishidama/home/tech/java/clipboard.html Javaクリップボードメモ(Hishidama's Java Clipboard Memo)]
* コメント [#comment]
#comment
#comment