Я пишу программу, которая просто перепечатывает текст из файла данных
Почему вы используете робота для перепечатывания текста? Почему вы не можете просто вставить текст в документ вашего текстового компонента.
Должен ли я использовать длинный код переключения?
Вы можете использовать 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() );
}
}
Просто введите текстовую строку в верхнем текстовом поле и нажмите кнопку. Обратите внимание, что он поддерживает только несколько специальных символов. Но обратите внимание, что это не надежное решение, потому что отображение зависит от клавиатуры.
Теперь я знаю способ предоставить универсальное c решение для всех клавиатур.