はあなたが拡張できるかの小さな例です。ここ
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
インスタンスを通過するドラッグ操作に。
の可能性のある重複した[ドラッグテキストにアクセスする方法(または:?入力し「仕事」にテキストをドラッグんどのように)](https://stackoverflow.com/questions/24808217/how-to-access-dragged-text -or-どの-ドラッグん-テキストに-入力作業) –