Java: Регистрация нажатия клавиши на JTextPane
Я делаю приложение с java, которое имеет JTextPane. Я хочу иметь возможность выполнять некоторый код, когда enter клавиша нажата (или когда пользователь переходит на следующую строку). Я посмотрел в интернете и не нашел решения. Было бы лучше заняться этим с помощью C#? Если нет, как я могу зарегистрировать ключ Enter в событии keyTyped() jtextpane? Если C# - хороший вариант, как бы я это сделал на C#?
вот решение, которое я думал, будет работать...но сделал не
//Event triggered when a key is typed
private void keyTyped(java.awt.event.KeyEvent evt) {
int key = evt.getKeyCode();
if (key == KeyEvent.VK_ENTER) {
Toolkit.getDefaultToolkit().beep();
System.out.println("ENTER pressed");
}
}
почему приведенный выше пример не работает, потому что независимо от того, какой ключ я нажимаю, я получаю код ключа 0. Я бы предпочел решение этой проблемы на Java, но C# будет работать так же хорошо, может быть, лучше. Кроме того, попробуйте ответить на вопрос примерами, а не ссылками(если вам действительно не нужно). Спасибо!
3 ответов
одним из решений является добавление привязки ключа к textpane. например,
JTextPane textPane = new JTextPane();
int condition = JComponent.WHEN_FOCUSED;
InputMap iMap = textPane.getInputMap(condition);
ActionMap aMap = textPane.getActionMap();
String enter = "enter";
iMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), enter);
aMap.put(enter, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("enter pressed");
}
});
этот ответ в случае, если кто-либо когда-либо просматривает этот поток У меня то же, что и у Мистера Мохаммеда Адиба. Поэтому вместо использования (evt.getKeyCode ()==evt.VK_ENTER) Я использую (evt.getKeyChar ()=='\n')
and the solution worked.
Я ищу клавишу ENTER в текстовом поле пароля, чтобы запустить метод входа при нажатии ENTER. Приведенный ниже код выведет в консоли код ключа. После запуска программы и ввода нескольких tihngs в поле, которое я обнаружил для ввода ключа, это код 13.
txtPass = new Text(shlLogin, SWT.BORDER | SWT.PASSWORD);
txtPass.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
System.out.println(e.keyCode);
if (e.keyCode == 13) { /* ... Do your stuff ... */ }
}
});
Если вы ищете одно нажатие клавиши, вы все равно можете быть немного ленивым и избегать изучения новых вещей о привязках клавиш, используя этот метод. Веселье начинается при добавлении CTRL+[письмо] ярлыки - но это для другого обсуждения.