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+[письмо] ярлыки - но это для другого обсуждения.