TITLE:TransferHandlerでHyperlinkをブラウザにドロップ
#navi(../)
RIGHT:Posted by [[terai]] at 2007-12-03
*TransferHandlerでHyperlinkをブラウザにドロップ [#w00349ec]
JButtonにTransferHandlerを設定して、ブラウザにリンクをドロップできるようにします。

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

#screenshot

**サンプルコード [#udf5497a]
#code{{
final String href = "http://terai.xrea.jp/";
//final DataFlavor uriflavor = new DataFlavor(String.class, "text/uri-list");
final DataFlavor uriflavor = DataFlavor.stringFlavor;
JButton b = new JButton(href);
b.setTransferHandler(new TransferHandler("text") {
  public boolean canImport(JComponent c, DataFlavor[] flavors) {
    return (flavors.length>0 && flavors[0].equals(uriflavor));
  }
  public Transferable createTransferable(JComponent c) {
    return new Transferable() {
      public Object getTransferData(DataFlavor flavor) {
        //System.out.println(flavor.getMimeType());
        return href;
      }
      public DataFlavor[] getTransferDataFlavors() {
        return new DataFlavor[] { uriflavor };
      }
      public boolean isDataFlavorSupported(DataFlavor flavor) {
        return flavor.equals(uriflavor);
      }
    };
  }
});
b.addMouseListener(new MouseAdapter() {
  public void mousePressed(MouseEvent e) {
    JButton button = (JButton)e.getSource();
    TransferHandler handler = button.getTransferHandler();
    handler.exportAsDrag(button, e, TransferHandler.COPY);
  }
});
}}

**解説 [#nd12fea7]
上記のサンプルでは、JButtonをマウスでブラウザにドラッグ&ドロップすると、そのサイトに移動するようになっています。ここでは、JButtonを使用していますが、JLabelなどの他のコンポーネントでも同様の設定が可能です。

以下のようなTransferHandlerとTransferableを設定しています。
-転送するプロパティー
--"text"
-DataFlavor
--DataFlavor.stringFlavor
-転送するデータ
--文字列("http://terai.xrea.jp/")

**参考リンク [#mab3f8d6]
-[[Hyperlinkを、JLabel、JButton、JEditorPaneで表示>http://terai.xrea.jp/Swing/HyperlinkLabel.html]]

**コメント [#a4ce95d5]
- Operaには、ドロップできないようです(MIMEタイプを設定しないとダメ?)。 -- [[terai]] &new{2007-12-03 (月) 14:41:28};

#comment