TITLE:Clipboardから文字列や画像を取得する
#navi(../)
#tags()
RIGHT:Posted by &author(aterai); at 2010-09-27
*Clipboardから文字列や画像を取得する [#ea481a83]
Clipboardから文字列や画像データを取得し、JLabelに表示します。

-&jnlp;
-&jar;
-&zip;

//#screenshot
#ref(http://lh6.ggpht.com/_9Z4BYR88imo/TQTUB2-qFWI/AAAAAAAAAlY/hlwTEjnyC_g/s800/SystemClipboard.png)

**サンプルコード [#y98eaa92]
#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) {
          java.awt.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;
}
}}

**解説 [#wc0fc224]
上記のサンプルをWeb Startで実行した場合は、Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null)ではなく、ClipboardService#getContents()を使って、Transferableを取得するようになっています。

-文字列
--Transferable#getTransferData(DataFlavor.stringFlavor)
-画像
--Transferable#getTransferData(DataFlavor.imageFlavor)

**参考リンク [#offe3c4c]
-[http://www.ne.jp/asahi/hishidama/home/tech/java/clipboard.html Javaクリップボードメモ(Hishidama's Java Clipboard Memo)]

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