如何复制剪贴板中的多个文本行并粘贴到另一个非 java 表单中
How to Copy multiple text line in clipboard and paste in another non java form
我想在系统剪贴板中复制多行文本,然后逐行粘贴到另一个应用程序中。
要复制的示例:
a
b
c
d
e
粘贴:
a
、b
、c
、...
然后我想将其粘贴到另一个非 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);
}
我想在系统剪贴板中复制多行文本,然后逐行粘贴到另一个应用程序中。
要复制的示例:
a
b
c
d
e
粘贴:
a
、b
、c
、...
然后我想将其粘贴到另一个非 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);
}