Swing JTextfield DnD用导入的文本替换现有文本

Swing JTextfield DnD用导入的文本替换现有文本,swing,drag-and-drop,Swing,Drag And Drop,我有两个文本字段,可以在它们之间拖放文本。我想要的是,每次我拖动文本时,它都会用拖放的文本替换现有的文本数据 import java.awt.Container; import javax.swing.BoxLayout; import javax.swing.JFrame; import javax.swing.JTextField; public class DragDropText extends JFrame { public static void main(String

我有两个文本字段,可以在它们之间拖放文本。我想要的是,每次我拖动文本时,它都会用拖放的文本替换现有的文本数据

import java.awt.Container;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class DragDropText extends JFrame {

    public static void main(String[] args) {
        new DragDropText().setVisible(true);
    }

    public DragDropText() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JTextField field1 = new JTextField("Life's a drag", 20);
        JTextField field2 = new JTextField("and then you drop", 20);
        field1.setDragEnabled(true);
        field2.setDragEnabled(true);
        Container content = getContentPane();

        content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
        content.add(field1);
        content.add(field2);

        pack();
    }
}

您可以通过创建和设置TransferHandler的子类来实现此效果

这是一个适用于JTextComponent的任何子类的示例。您必须添加适当的检查以使其健壮

您可以在此处找到更多信息:


您可以通过创建和设置TransferHandler的子类来实现此效果

这是一个适用于JTextComponent的任何子类的示例。您必须添加适当的检查以使其健壮

您可以在此处找到更多信息:

import java.io.*;
import java.awt.*;
import java.awt.datatransfer.*;
import javax.swing.*;
import javax.swing.text.*;

public class DragDropText extends JFrame {

    public static void main(String[] args) {
        new DragDropText().setVisible(true);
    }

    public DragDropText() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JTextField field1 = new JTextField("Life's a drag", 20);
        JTextField field2 = new JTextField("and then you drop", 20);
        field1.setDragEnabled(true);
        field2.setDragEnabled(true);
        field1.setTransferHandler(new CustomTransferHandler());
        field2.setTransferHandler(new CustomTransferHandler());

        Container content = getContentPane();

        content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
        content.add(field1);
        content.add(field2);

        pack();
    }
}

class CustomTransferHandler extends TransferHandler {
    public int getSourceActions(JComponent c) {
        return COPY_OR_MOVE;
    }

    public Transferable createTransferable(JComponent c) {
        return new StringSelection(((JTextComponent) c).getSelectedText());
    }

    public void exportDone(JComponent c, Transferable t, int action) {
        if(action == MOVE)
            ((JTextComponent) c).replaceSelection("");
    }

    public boolean canImport(TransferSupport ts) {
        return ts.getComponent() instanceof JTextComponent;
    }

    public boolean importData(TransferSupport ts) {
        try {
            ((JTextComponent) ts.getComponent())
                .setText((String) ts
                         .getTransferable()
                         .getTransferData(DataFlavor.stringFlavor));
            return true;
        } catch(UnsupportedFlavorException e) {
            return false;
        } catch(IOException e) {
            return false;
        }
    }
}