Key pressing special characters using Robot class Java(使用Robot类Java按键按下特殊字符)
本文介绍了使用Robot类Java按键按下特殊字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在编写一个简单地重新键入数据文件中的文本的程序。该程序一直有效,直到它命中第一个特殊字符。下面是一个例子:
数据文件
Hey what is up?
我得到的
Hey what is up (throws illegal argument exception)
以下是我的代码:
public static void KeyPresser() throws FileNotFoundException, AWTException {
Robot robot = new Robot();
Scanner file = new Scanner(new File("script.dat"));
while(file.hasNext()) {
String word = file.nextLine();
for(int i = 0;i<word.length();i++) {
char c = word.charAt(i);
if (Character.isUpperCase(c)) {
robot.keyPress(KeyEvent.VK_SHIFT);
}
robot.keyPress(Character.toUpperCase(c));
robot.keyRelease(Character.toUpperCase(c));
if (Character.isUpperCase(c)) {
robot.keyRelease(KeyEvent.VK_SHIFT);
}
if(c=='?') {
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SLASH);
robot.keyRelease(KeyEvent.VK_SLASH);
robot.keyRelease(KeyEvent.VK_SHIFT);
}
}
}
}
它会输入字母,而不是特殊字符吗?我是不是要用一个很长的开关密码?或者,有没有简单的办法来解决这个问题?如您所知,我已经尝试使用
if(c=='?') {
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SLASH);
robot.keyRelease(KeyEvent.VK_SLASH);
robot.keyRelease(KeyEvent.VK_SHIFT);
}
但这不起作用,我该怎么办?
推荐答案
我正在编写一个简单地重新键入数据文件中的文本的程序
为什么要使用Robot重新键入文本?为什么不能直接将文本插入到文本组件的文档中。
我必须使用长的切换代码吗?
您可以使用HashMap来映射需要使用常规键进行移位的键:
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class RobotString extends JPanel
{
private static HashMap<Character, Character> keyMap = new HashMap<>();
private JTextField original;
private JTextField copy;
public RobotString()
{
setLayout( new BorderLayout() );
original = new JTextField(10);
add(original, BorderLayout.PAGE_START);
JButton button = new JButton("Use Robot");
add(button, BorderLayout.CENTER);
button.addActionListener((e) -> invokeRobot() );
copy = new JTextField(10);
add(copy, BorderLayout.PAGE_END);
// Create mapping of keys
keyMap.put('!', '1');
keyMap.put('@', '2');
keyMap.put('#', '3');
keyMap.put(':', ';');
keyMap.put('?', '/');
}
private void invokeRobot()
{
copy.requestFocusInWindow();
copy.setText( "" );
try
{
Robot robot = new Robot();
char[] letters = original.getText().toCharArray();
for(char letter: letters)
{
boolean shiftRequired = false;
Character value = keyMap.get(letter);
if (value != null)
{
shiftRequired = true;
letter = value;
}
else if (Character.isUpperCase(letter))
{
shiftRequired = true;
}
int keyCode = KeyEvent.getExtendedKeyCodeForChar( letter );
if (shiftRequired)
robot.keyPress(java.awt.event.KeyEvent.VK_SHIFT);
robot.keyPress( keyCode );
robot.keyRelease( keyCode );
if (shiftRequired)
robot.keyRelease(java.awt.event.KeyEvent.VK_SHIFT);
}
}
catch(Exception e) { e.printStackTrace(); }
}
private static void createAndShowGUI()
{
JFrame frame = new JFrame("SSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new RobotString());
frame.pack();
frame.setLocationByPlatform( true );
frame.setVisible( true );
}
public static void main(String[] args) throws Exception
{
java.awt.EventQueue.invokeLater( () -> createAndShowGUI() );
}
}
只需在顶部文本字段中键入文本字符串,然后单击按钮即可。请注意,它只支持几个特殊字符。
但请注意,这不是一个可靠的解决方案,因为映射依赖于键盘。
我现在知道为所有键盘提供通用解决方案的方法。
这篇关于使用Robot类Java按键按下特殊字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:使用Robot类Java按键按下特殊字符
基础教程推荐
猜你喜欢
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01