gpt4 book ai didi

java - 使用 Robot 类 Java 按键特殊字符

转载 作者:行者123 更新时间:2023-12-01 17:04:58 30 4
gpt4 key购买 nike

我正在编写一个程序,只需重新输入数据文件中的文本。该程序将一直运行,直到遇到第一个特殊字符。这是一个例子:

数据文件

嘿,怎么了?

我得到了什么

嘿,发生了什么(抛出非法参数异常)

这是我的代码:


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);
}

但这不起作用,我能做什么?

最佳答案

I am writing a program that simply retypes the text from the data file

为什么要使用机器人重新输入文本?为什么不能将文本插入到文本组件的文档中。

Am I gonna have to use a long switch code?

可以使用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() );
}
}

只需在顶部文本字段中输入文本字符串,然后单击按钮即可。请注意,它仅支持一些特殊字符。但请注意,这不是一个可靠的解决方案,因为映射取决于键盘。

我现在知道为所有键盘提供通用解决方案的方法。

关于java - 使用 Robot 类 Java 按键特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61471454/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com