JAVA程序自动将文本域中的文本打出来

系列文章目录


前言

链接: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;
		}
	}

}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值