2017-08-01 10 views
1

私は(テキストを含む)は、Javaのスイングラベルを作りたいドラッグ可能なことは、(JSリスナーがテキストをピックアップ)ブラウザウィンドウにドロップすることができるようにします。それはドラッグ可能作ることは十分に簡単ですが、ブラウザのウィンドウにそれを転送する方法?ドラッグ&ウェブブラウザに、Javaからテキストをドロップ

私はこの上のドキュメントを探してきたが、私が見つけたもののほとんどは、このように古くからある(1999年から!):ここでhttp://www.javaworld.com/article/2076358/swing-gui-programming/how-to-drag-and-drop-with-java-2--part-1.html

+1

の可能性のある重複した[ドラッグテキストにアクセスする方法(または:?入力し「仕事」にテキストをドラッグんどのように)](https://stackoverflow.com/questions/24808217/how-to-access-dragged-text -or-どの-ドラッグん-テキストに-入力作業) –

答えて

0

はあなたが拡張できるかの小さな例です。ここ

import javax.swing.*; 
import java.awt.datatransfer.StringSelection; 
import java.awt.datatransfer.Transferable; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseMotionListener; 

/** 
* @author Mikle Garin 
* @see https://stackoverflow.com/questions/45437809/drag-and-drop-text-from-java-to-web-browser 
*/ 

public class TextDragHandler extends TransferHandler implements MouseListener, MouseMotionListener 
{ 
    /** 
    * Drag source component. 
    */ 
    private final JComponent component; 

    /** 
    * Text to drag. 
    */ 
    private final String text; 

    /** 
    * Whether or not drag was armed. 
    * This flag is used to avoid multiple export operations. 
    */ 
    private boolean armed; 

    /** 
    * Constructs new {@link TextDragHandler}. 
    * 
    * @param component drag source component 
    * @param text  text to drag 
    */ 
    public TextDragHandler (final JComponent component, final String text) 
    { 
     super(); 
     this.armed = false; 
     this.text = text; 
     this.component = component; 
     this.component.addMouseListener (this); 
     this.component.addMouseMotionListener (this); 
    } 

    @Override 
    public void mouseClicked (final MouseEvent e) 
    { 
     // Do nothing 
    } 

    @Override 
    public void mousePressed (final MouseEvent e) 
    { 
     if (component.isEnabled() && SwingUtilities.isLeftMouseButton (e)) 
     { 
      armed = true; 
     } 
    } 

    @Override 
    public void mouseReleased (final MouseEvent e) 
    { 
     if (SwingUtilities.isLeftMouseButton (e)) 
     { 
      armed = false; 
     } 
    } 

    @Override 
    public void mouseEntered (final MouseEvent e) 
    { 
     // Do nothing 
    } 

    @Override 
    public void mouseExited (final MouseEvent e) 
    { 
     // Do nothing 
    } 

    @Override 
    public void mouseMoved (final MouseEvent e) 
    { 
     // Do nothing 
    } 

    @Override 
    public void mouseDragged (final MouseEvent e) 
    { 
     if (armed) 
     { 
      exportAsDrag (component, e, getSourceActions (component)); 
      armed = false; 
     } 
    } 

    @Override 
    public int getSourceActions (final JComponent c) 
    { 
     return COPY; 
    } 

    @Override 
    protected Transferable createTransferable (final JComponent c) 
    { 
     return new StringSelection (text); 
    } 

    /** 
    * Sample {@link TextDragHandler} usage. 
    * 
    * @param args run arguments 
    */ 
    public static void main (final String[] args) 
    { 
     final JFrame frame = new JFrame ("Drag example"); 

     final JLabel label = new JLabel ("DRAG ME"); 
     label.setTransferHandler (new TextDragHandler (label, label.getText())); 
     label.setBorder (BorderFactory.createEmptyBorder (50, 50, 50, 50)); 
     frame.add (label); 

     frame.setDefaultCloseOperation (WindowConstants.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo (null); 
     frame.setVisible (true); 
    } 
} 

最も重要なことは、ドラッグ操作を開始exportAsDrag (...)呼び出しです:他の実行中のアプリケーションにJLabel(または他のコンポーネント)からテキストをドラッグするTransferHandlerシステム内の(この場合は - StringSelectionインスタンス)あなたTransferableインスタンスを通過するドラッグ操作に。

関連する問題