1
我想使Java swing標籤(包含文本)可拖動,以便將其放入瀏覽器窗口(js偵聽器拾取文本的位置)。使其可拖動很容易,但如何將其傳輸到瀏覽器窗口?將文本從Java拖放到Web瀏覽器
我一直在尋找的文件在此,但大多數的是我發現的是很久以前像這樣(1999年!):
我想使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 - 或如何 - 並拖動文本 - 到 - 一個輸入工作) –