将文本从Java拖放到Web浏览器
问题描述:
我想使Java swing标签(包含文本)可拖动,以便将其放入浏览器窗口(js侦听器拾取文本的位置)。使其可拖动很容易,但如何将其传输到浏览器窗口?将文本从Java拖放到Web浏览器
我一直在寻找的文件在此,但大多数的是我发现的是很久以前像这样(1999年!):
答
下面是如何可以延长一个小例子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
实例)传递到该拖动操作。
[如何访问拖动的文本(或:如何将文本拖入输入“工作”?)](https://stackoverflow.com/questions/24808217/how-to-access-dragged-text - 或如何 - 并拖动文本 - 到 - 一个输入工作) –