TITLE:TransferHandlerでHyperlinkをブラウザにドロップ

Posted by terai at 2007-12-03

TransferHandlerでHyperlinkをブラウザにドロップ

JButtonにTransferHandlerを設定して、ブラウザにリンクをドロップできるようにします。

  • &jnlp;
  • &jar;
  • &zip;

#screenshot

サンプルコード

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);
  }
});

解説

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

以下のようなTransferHandlerとTransferableを設定しています。

  • 転送するプロパティー
    • "text"
  • DataFlavor
    • DataFlavor.stringFlavor
  • 転送するデータ

参考リンク

コメント

  • Operaには、ドロップできないようです(MIMEタイプを設定しないとダメ?)。 -- terai