2017-08-01 52 views
1

我想使Java swing標籤(包含文本)可拖動,以便將其放入瀏覽器窗口(js偵聽器拾取文本的位置)。使其可拖動很容易,但如何將其傳輸到瀏覽器窗口?將文本從Java拖放到Web瀏覽器

我一直在尋找的文件在此,但大多數的是我發現的是很久以前像這樣(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 - 或如何 - 並拖動文本 - 到 - 一個輸入工作) –

回答

0

下面是如何可以延長一個小例子TransferHandler拖動從JLabel文本(或任何其他組件)到其他運行的應用程序:

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 (...)調用它啓動拖動操作並將您的Transferable實例(本例中爲StringSelection實例)傳遞到該拖動操作。