Swing/SystemClipboard のバックアップの現在との差分(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - 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] tags: [ServiceManager, Clipboard, 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 --- * 概要 [#ea481a83] * 概要 [#summary] `Clipboard`から文字列や画像データを取得し、`JLabel`に表示します。 #download(https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTUB2-qFWI/AAAAAAAAAlY/hlwTEjnyC_g/s800/SystemClipboard.png) * サンプルコード [#y98eaa92] * サンプルコード [#sourcecode] #code(link){{ private ClipboardService cs = null; public JComponent makeUI() { try{ cs = (ClipboardService)ServiceManager.lookup("javax.jnlp.ClipboardService"); }catch(UnavailableServiceException e) { 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) { java.awt.Toolkit.getDefaultToolkit().beep(); Transferable t = Objects.isNull(cs) ? 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); 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) { } catch (Exception ex) { ex.printStackTrace(); } } }), BorderLayout.SOUTH); return p; } }} * 解説 [#wc0fc224] 上記のサンプルを`Web Start`で実行した場合は、`Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null)`ではなく、`ClipboardService#getContents()`を使って、`Transferable`を取得するようになっています。 * 解説 [#explanation] - `Web Start`で実行: -- `ClipboardService#getContents()`を使って`Transferable`を取得 - ローカル環境で実行: -- `Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null)`を使って`Transferable`を取得 - 文字列 ---- - `Transferable`から文字列を取得 -- `Transferable#getTransferData(DataFlavor.stringFlavor)` - 画像 - `Transferable`から画像を取得 -- `Transferable#getTransferData(DataFlavor.imageFlavor)` * 参考リンク [#offe3c4c] - [http://www.ne.jp/asahi/hishidama/home/tech/java/clipboard.html Javaクリップボードメモ(Hishidama's Java Clipboard Memo)] * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/datatransfer/Clipboard.html Clipboard (Java Platform SE 8)] - [https://www.ne.jp/asahi/hishidama/home/tech/java/clipboard.html Javaクリップボードメモ(Hishidama's Java Clipboard Memo)] * コメント [#u9d01034] * コメント [#comment] #comment #comment