系列文章目录
前言
链接:https://pan.baidu.com/s/1WImAhRAsQSP4214d-oNclQ
提取码:c5rq
(对了,如果输出大写字母有问题的话,就在text4.txt文件内容最前面加一个任意字符,用来对应小写中的空格)
python版本:https://blog.csdn.net/m0_50687157/article/details/124154549
一、JAVA程序自动将文本域中的文本打出来
我使用eclipse来做这个程序,并使用windowbuilder来减轻工作量,加快构建速度,在New中的Other选项中;如图
接着开始框架的搭建,将窗体和相应的组件搭建好
功能:将想要输出的文本复制到程序界面的文本框中,然后点击开始,在倒计时结束之前鼠标要切到要输出的地方(也就是输出的地方要自己选),倒计时结束后会开始输出。
为了实现取消的功能,将开始的触发事件变成了一个线程,这样就能实时取消了。
代码
package text_aotu_output;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;
import javax.swing.JLabel;
import javax.swing.JTextPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.JButton;
import javax.swing.SwingConstants;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
public class output extends JFrame {
private JPanel contentPane;
public JLabel label_top;
MyThread mythread;
String text="";
//是否在输出的标志
boolean output_flag=false;
//是否取消的标志
boolean cancel_flag=false;
// mythread.start();
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
output frame = new output();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public output() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 230, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
label_top = new JLabel("\u8F93\u51FA\u672A\u5F00\u59CB");
label_top.setHorizontalAlignment(SwingConstants.CENTER);
contentPane.add(label_top, BorderLayout.NORTH);
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.SOUTH);
JButton start = new JButton("\u5F00\u59CB");
panel.add(start);
JButton cancel = new JButton("\u53D6\u6D88");
panel.add(cancel);
JScrollPane scrollPane = new JScrollPane();
contentPane.add(scrollPane, BorderLayout.CENTER);
JTextArea textArea = new JTextArea();
textArea.setLineWrap(true);
scrollPane.setViewportView(textArea);
start.addActionListener(new ActionListener() { // 为按钮添加监听事件
public void actionPerformed(ActionEvent e) {
if(!output_flag) {
text=textArea.getText();
// System.out.println(text.split("\n").length);
output_flag=true;
cancel_flag=false;
mythread = new MyThread();
mythread.start();
}
}
});
cancel.addActionListener(new ActionListener() { // 为按钮添加监听事件
public void actionPerformed(ActionEvent e) {
cancel_flag=true;
output_flag=false;
}
});
}
class MyThread extends Thread{
private boolean suspend=false;
public synchronized void tosuspend() {
suspend=true;
}
public synchronized void toresume() {
suspend=false;
notify(); //唤醒线程
}
public void run() {
//开始输出
Robot myRobot = null;
try {
myRobot = new Robot();
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// System.out.println("开始");
int [] arr= {1};
String [] str= {" "};
char [] char_arr= {' '};
String lowercase="";
String uppercase="";
//输出的小写字符
String fileName = "./resource/text2.txt";
try (Scanner sc = new Scanner(new FileReader(fileName))) {
while (sc.hasNextLine()) { //按行读取字符串
lowercase = sc.nextLine();
// str=line.split("<space>");
}
// System.out.println(lowercase);
// char_arr=new char [str.length];
// for(int i=0;i<str.length;i++) {
// char_arr[i]=str[i].charAt(0);
// }
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//输出的大写写字符
fileName = "./resource/text4.txt";
try (Scanner sc = new Scanner(new FileReader(fileName))) {
while (sc.hasNextLine()) { //按行读取字符串
uppercase = sc.nextLine();
}
// System.out.println(uppercase);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//输出的字符的命令
fileName = "./resource/text3.txt";
try (Scanner sc = new Scanner(new FileReader(fileName))) {
while (sc.hasNextLine()) { //按行读取字符串
String line = sc.nextLine();
str=line.split("<space>");
// System.out.println(line);
arr=new int [str.length];
for (int i = 0; i < str.length; i++) {
arr[i]=Integer.valueOf(str[i]);
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//开始前的倒计时
try {
for(int i=5;i>0;i--) {
label_top.setText("开始倒计时:"+i);
Thread.sleep(1000);
if(cancel_flag) {
// label_top.setText("输出取消");
break;
}
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String [] text_lines=text.split("\n");
int len=text_lines.length;
for(int i=0;i<len;i++) {
if(cancel_flag) {
// label_top.setText("输出取消");
break;
}
// System.out.println(text_lines[i]);
String text_line=text_lines[i];
// myRobot.keyPress(KeyEvent.VK_SPACE);
// myRobot.keyRelease(KeyEvent.VK_SPACE);
// myRobot.keyPress(KeyEvent.VK_SPACE);
// myRobot.keyRelease(KeyEvent.VK_SPACE);
for(int j=0;j<text_line.length();j++) {
if(cancel_flag) {
// label_top.setText("输出取消");
break;
}
int result1 = lowercase.indexOf(text_line.charAt(j));
if(result1 != -1){
myRobot.keyPress(arr[result1]); // 模拟键盘按下Q键(小写)
myRobot.keyRelease(arr[result1]); // 模拟键盘释放Q键'"
continue;
}
result1 = uppercase.indexOf(text_line.charAt(j));
if(result1 != -1){
//大写
myRobot.keyPress(KeyEvent.VK_SHIFT); // 模拟键盘按下shift键
myRobot.keyPress(arr[result1]); // 模拟键盘按下Q键(小写)
myRobot.keyRelease(arr[result1]); // 模拟键盘释放Q键'"
myRobot.keyRelease(KeyEvent.VK_SHIFT); // 模拟键盘释放shift键
continue;
}
}
myRobot.keyPress(KeyEvent.VK_ENTER);
myRobot.keyRelease(KeyEvent.VK_ENTER);
}
// System.out.println("结束");
label_top.setText("输出结束");
output_flag=false;
}
}
}