如何复制剪贴板中的多个文本行并粘贴到另一个非 java 表单中

How to Copy multiple text line in clipboard and paste in another non java form

我想在系统剪贴板中复制多行文本,然后逐行粘贴到另一个应用程序中。

要复制的示例:

a
b
c
d
e

粘贴: abc、...

然后我想将其粘贴到另一个非 java 程序中(该程序包含一个文本框,我想将文本粘贴到其中。)。即使在粘贴后它应该仍然是相同的格式。每次粘贴后,它应该自动按 tab 并将焦点移动到另一个文本框。冲洗并重复 2 行文本。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    try {
        Robot r = new Robot();
    } catch (AWTException ex) {
        Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
    }

    String toClipBoardText = jTextField1.getText()+"\n"+jTextField2.getText()+"\n"+jTextField3.getText()+"\n"+jTextField4.getText()+"\n"+jTextField5.getText();
    StringSelection stringClip = new StringSelection(toClipBoardText);
    clip.setContents(stringClip, stringClip);
}  

我们使用一个Scanner来遍历代码行。然后我们将下一行设置到剪贴板并按 Ctrl + V 使用 Robot class 粘贴数据.单击 JButton 后,您有 5 秒的时间单击所需的文本框。然后它将开始粘贴和制表符。

那里有一些 sleep(...) 语句,因为我不知道 UI 你正在使用它最好保存而不是抱歉,给它一些时间做出反应。

import java.awt.*;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.util.Scanner;

import static java.awt.event.KeyEvent.*;

// ...

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    try {
        String multiLineText = jTextField1.getText()+"\n"+jTextField2.getText()+"\n"+jTextField3.getText()+"\n"+jTextField4.getText()+"\n"+jTextField5.getText();
        Scanner textReader = new Scanner(multiLineText);
        Robot r = new Robot();

        System.out.println("You have 5 seconds to focus the text box into which the text will be pasted!");

        for (int i = 0; i < 5; i++) {
            System.out.println(5 - i + "...");
            Thread.sleep(1000);
        }
        System.out.println("Start pasting...");
        while (textReader.hasNext()) {
            String line = textReader.nextLine().trim();
            System.out.println("\t> Pasting \"" + line + "\"");

            Toolkit.getDefaultToolkit()
                    .getSystemClipboard()
                    .setContents(
                            new StringSelection(line),
                            null);

            pressKeys(r, VK_CONTROL, VK_V);
            pressKeys(r, VK_TAB);
        }

    } catch (AWTException | InterruptedException ex) {
        throw new RuntimeException(ex);
    }
}

public static void pressKeys(Robot robot, int... keys) throws InterruptedException {
    for (int i = 0; i < keys.length; i++) {
        robot.keyPress(keys[i]);
        Thread.sleep(10);
    }
    for (int i = 0; i < keys.length; i++) {
        robot.keyRelease(keys[keys.length - i - 1]);
        Thread.sleep(10);
    }
    Thread.sleep(100);
}